D - 超级赛亚ACMer

news/2024/11/30 6:35:15/

百小度是一个ACMer,也是一个超级赛亚人,每个ACMer都有一个战斗力,包括百小度。
所谓超级赛亚人的定义,是说如果在对抗中刚好接近极限状态,那就会激发斗志,实力提升.

具体来说,就是百小度现在要接受一些ACMer的挑战了,这些ACMer有n个人,第i个人的战斗力是a[i]。


百小度接下来可以自主安排与这n个ACMer的PK顺序,他要想在PK赛中赢过另外一个ACMer,就必须使得自己的战斗力不小于对方(平局情况他会按照百小度字典上的规则把自己排在第一).

如果百小度的战斗力大于对方,那么百小度就会轻易获胜,得不到锻炼并且骄傲起来,他以后的战斗力将保持在这个值,再也不会发生改变。
如果百小度的战斗力等于对方,那么百小度在获胜的同时也会感到很吃力,但是这会激发百小度的斗志,使得他刻苦刷题,在下场PK赛之前,战斗力最多提升k点(即可以提升0~k点任意值).

k是百小度的潜力提升上限,会被给定一个初始值,这个潜力提升上限k在后面的比赛中会下降.

每战胜一个ACMer,这个潜力上限k将减少1(因为超级赛亚人百小度也会感到累),但k最低只会减少到0,即不会出现战斗力下降的情况。也就是第一次比赛如果激发了百小度的斗志,他能把战斗力提升0~k的任一值,如果第二次比赛继续被激发斗志,他能在第一次提升后的基础上,把战斗力再提升0 ~ max(0, k-1),依次类推…

m是百小度的初始战斗力上限,也就是百小度第一次进行PK赛的时候,可以选择0~m的任意一个值作为他的战斗力.

现在希望你编写程序,判断一下百小度是否战胜所有的ACMer.

Input

输入包含多组数据(数据不超过500组)

第一行一个整数T,表示T组数据

对于每组数据,第一行包括三个整数n, m, k(1≤n≤104,1≤m,k≤108)

第二行包括n个正整数,表示彪形大汉的战斗力(战斗力为不超过10^12的正整数)

Output

对于每组数据,先输出一行Case #i:(1≤i≤T)

如果百小度能打败所有的ACMer,再输出"why am I so diao?"

否则再输出"madan!"

Sample

InputcopyOutputcopy
2
5 11 3
15 13 10 9 8
5 11 3
8 9 10 13 16
Case #1:
why am I so diao?
Case #2:
madan!

Hint

第一组样例解释
5个ACMer,初始战斗力选择范围是[0,11],接下来每场战斗力提升上限是3,2,1,0,0,...,0
百小度首先使得自己的初始战斗力为10,打败战斗力为10的第一个ACMer,
然后选择战斗力提升3,变成13,打败战斗力为13的第二个ACMer,
然后选择战斗力提升2,变成15,打败战斗力为15的第三个ACMer,
之后再以任意顺序打败剩下的ACMer

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;typedef long long ll;   //本题需要开long long
const int N = 1e4 + 10;
ll a[N];//我们需要让ACMer的战斗力尽可能与当前敌人的战斗力相等,这样才能尽可能的提升战斗力
int main()
{ll t; scanf_s("%lld",&t);ll ans = 1;while (t--){memset(a, 0, sizeof a);   //每次都需要对其进行初始化,以防与下面的 <if (num + k >= a[i] && num + k < a[i + 1])> 的条件判断冲突ll n, m, k;scanf_s("%lld%lld%lld", &n, &m, &k);for (int i = 1; i <= n; i++) scanf_s("%lld", &a[i]);sort(a + 1, a + n + 1);  //进行升序排序ll temp = lower_bound(a + 1, a + n + 1, m) - a - 1;   //选择最佳的初始战斗力,即等于经过排序后的第一个大于其初始最大战斗力的敌人的前一个敌人的战斗力ll num = a[temp];ll chudi = temp + 1;  //记录大于初始战斗力的敌人的位置printf("Case #%lld:\n", ans);//特判1:if (m >= a[n]){printf("why am I so diao?\n");ans++;continue;}//特判2:if (m < a[1]){printf("madan!\n");ans++;continue;}for (int i = temp; i <= n; i++){if (num + k >= a[i] && num + k < a[i + 1]) //注意:这里循环到n-1就跳出循环了,最后位置(n)不满足 <num+k<a[i-1]> {num = a[i];k--;}}//如果打败倒数第二个敌人后提升的战斗力也能打败最后一个敌人,则成功;否则,反之if (num + k >= a[n]) printf("why am I so diao?\n");else printf("madan!\n");ans++;}return 0;
}


http://www.ppmy.cn/news/1102168.html

相关文章

【redis进阶】基础知识简要回顾

1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet&#xff08;ZSet&#xff09;统计&#xff0c;再利用分页列出权重高的元素 二值状态统计 BitMap存储&#xff0c;获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…

【MyBatis】四、MyBatis中的动态SQL标签

动态SQL 动态SQL语句是动态的拼接Mybatis中SQL语句的情况&#xff0c;可以动态的在Mybatis中使用SQL if语句 if语句的xml文件&#xff1a; <!-- List<Emp> getEmpByCondition(Emp emp);--><select id"getEmpByCondition" resultType"Emp&…

Android Studio开发入门教程:如何更改APP的图标?

更改APP的图标&#xff08;安卓系统&#xff09; 环境&#xff1a;Windows10、Android Studio版本如下图、雷电模拟器。 推荐图标库 默认APP图标 将新图标拉进src/main/res/mipmap-hdpi文件夹&#xff08;一般app的icon图标是存放在mipmap打头的文件夹下的&#xff09; 更改sr…

Android菜单(上下文菜单)(选项菜单)

菜单资源文件通常放置在res\menu目录下&#xff0c;在创建项目时&#xff0c;默认不自动创建menu目录&#xff0c;所以需要手动创建。Android Resource Directory->value menu 菜单资源根元素通常是<menu></menu>标记&#xff0c;子元素为<item></ite…

End-to-end 3D Human Pose Estimation with Transformer

基于Transformer的端到端三维人体姿态估计 摘要 基于Transformer的架构已经成为自然语言处理中的常见选择&#xff0c;并且现在正在计算机视觉任务中实现SOTA性能&#xff0c;例如图像分类&#xff0c;对象检测。然而&#xff0c;卷积方法在3D人体姿态估计的许多方法中仍然保…

java面试题-MySQL相关面试题

MySQL相关面试题 面试官&#xff1a;MySQL中&#xff0c;如何定位慢查询? 候选人&#xff1a; 嗯~&#xff0c;我们当时做压测的时候有的接口非常的慢&#xff0c;接口的响应时间超过了2秒以上&#xff0c;因为我们当时的系统部署了运维的监控系统Skywalking &#xff0c;在展…

第4章_瑞萨MCU零基础入门系列教程之瑞萨 MCU 源码设计规范

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Java集合面试

文章目录 Java集合框架说说有哪些常见的集合&#xff1f;ArrayList和LinkedList的区别&#xff1f;List和Set的区别&#xff1f;HashMap的数据结构&#xff1f;把你了解的所有都讲一讲&#xff1f;数据结构&#xff1a; put流程Hashmap的resize方法的执行过程&#xff1f;get流…