Problem Description
百小度是一个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个正整数,表示彪形大汉的战斗力(战斗力为不超过1012的正整数)
 
Output
对于每组数据,先输出一行Case #i: (1≤i≤T)



假设百小度能打败全部的ACMer,再输出"why am I so diao?"



否则再输出"madan!"
 
Sample Input
  1. 2
  2. 5 11 3
  3. 15 13 10 9 8
  4. 5 11 3
  5. 8 9 10 13 16
 
Sample Output
  1. Case #1:
  2. why am I so diao?
  3. Case #2:
  4. madan!
  5. Hint
  6. 第一组例子解释
  7. 5ACMer,初始战斗力选择范围是[0,11],接下来每场战斗力提升上限是3,2,1,0,0,...,0
  8. 百小度首先使得自己的初始战斗力为10。打败战斗力为10的第一个ACMer
  9. 然后选择战斗力提升3,变成13,打败战斗力为13的第二个ACMer
  10. 然后选择战斗力提升2,变成15,打败战斗力为15的第三个ACMer
  11. 之后再以随意顺序打败剩下的ACMer
  12. 这题是道二分题。先按大小排序,然后每次查找第一个大于当前战斗力的值的位置j,然后把a[j-1]+k变为新的力量值(假设j1的话就break),当k=0可是当前战斗力还是比最大值小的时候就说明不可能战胜了break;
  13. ps:从大神那里学会了假设在int main()函数中用到超过10^9的数,要在#define inf 100000000000后加上LL,即#define inf 100000000000LL
  14. #include<iostream>
  15. #include<stdio.h>
  16. #include<string.h>
  17. #include<math.h>
  18. #include<vector>
  19. #include<map>
  20. #include<queue>
  21. #include<stack>
  22. #include<string>
  23. #include<algorithm>
  24. #define inf 10000000000000LL
  25. using namespace std;
  26. __int64 a[10006];
  27. int main()
  28. {
  29. 	int T,m,n,i,j,k,num1=0,flag;
  30. 	__int64 liqi,minx,maxx;
  31. 	scanf("%d",&T);
  32. 	while(T--)
  33. 	{
  34. 		scanf("%d%d%d",&n,&m,&k);
  35. 		num1++;
  36. 		maxx=0;minx=inf;
  37. 		for(i=1;i<=n;i++){
  38. 			scanf("%I64d",&a[i]);
  39. 			if(a[i]>maxx)maxx=a[i];
  40. 			if(a[i]<minx)minx=a[i];
  41. 		}
  42. 		printf("Case #%d:\n",num1);
  43. 		if(m>=maxx){
  44. 			printf("why am I so diao?\n");continue;
  45. 		}
  46. 		if(m<minx){
  47. 			printf("madan!\n");continue;
  48. 		}
  49. 		sort(a+1,a+n+1);
  50. 		flag=0;
  51. 		liqi=m;
  52. 		while(1)
  53. 		{
  54. 			//printf("%d\n",liqi);
  55. 			if(liqi>=maxx){
  56. 				flag=1;break;
  57. 			}
  58. 			if(n==1)break;
  59. 			if(k==0)break;
  60. 			j=upper_bound(a+1,a+1+n,liqi)-a;
  61. 			if(j==1)break;
  62. 			liqi=a[j-1]+k;k--;
  63. 			for(i=j-1;i<=n-1;i++){
  64. 				a[i]=a[i+1];
  65. 			}
  66. 			n--;
  67. 		}
  68. 		if(flag){
  69. 			printf("why am I so diao?
  70. \n");continue;
  71. 		}
  72. 		else printf("madan!\n");continue;
  73. 	}
  74. }

  75.  

hdu5246 超级赛亚ACMer的更多相关文章

  1. hdu5246超级赛亚ACMer

    题意(中文题意直接粘吧)                             超级赛亚ACMer Problem Description   百小度是一个ACMer,也是一个超级赛亚人,每个ACM ...

  2. 2015年百度之星初赛(1) --- A 超级赛亚ACMer

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  3. 2015 百度之星 1001 超级赛亚ACMer 贪心

    超级赛亚ACMer Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1750 Descrip ...

  4. 二分查找 2015百度之星初赛1 HDOJ 5246 超级赛亚ACMer

    题目传送门 /* 二分找到不大于m的最大的数,记做p,只要a[p] + k <= a[p+1]就继续 注意:特判一下当没有比m小的数的情况:) */ #include <cstdio> ...

  5. 【HDU-5246】超级赛亚ACMer(贪心)

    之前用了个nlogn的算法超时了.仅仅能改成n的算法了 大题贪心思路就是 对每一个人的能力值从小到大进行排序,当前能力值为now,那么我们找到一个人的能力使得这个能力值 <= now.now + ...

  6. 5w 字 | 172 图 | 超级赛亚级 Spring Cloud 实战

    一.PassJava 项目简介 PassJava-Learning 项目是 PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款 Java 面试刷题 的 ...

  7. UITableViewCell单元格的删除、插入、移动

    UITableViewDelegate的方法      设置编辑模式中得cell的编辑样式(删除或插入)      - (UITableViewCellEditingStyle)tableView:( ...

  8. 【CityHunter】通过Unity3D来制作游戏中AR部分的内容

    嗯,最近再考虑,CityHunter中,玩家攻略藏宝图时,为了增加可玩性,应该增强在AR部分的游戏性.最近特别火的游戏<Pokemon Go>在打开摄像头以后,可以看到小精灵,实际上,如果 ...

  9. C_C++圣战(摘录)

    我的回忆和有趣的故事 --- C/C++圣战篇 李维 (声明以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根据我的记忆以及从许多人的诉说中得知的,也许内容不是百分之百的正确 ...

随机推荐

  1. 用最简单的例子理解复合模式(Composite Pattern)

    在显示树形结构时,复合模式有很好的体现.本篇显示如下部门结构: 以上,有的节点包含子节点,有的节点部包含子节点.不管是什么节点,每个节点就代表一个部门. 首先设计一个关于部门的抽象基类. public ...

  2. MVC使用TempData跨控制器传递信息而无需记住key的名称

    通常情况下,使用TempData需要记住key的名称,本篇体验:通过帮助类,实现对TempData的设置.获取.删除. 关于传递信息的类: namespace MvcApplication1.Mode ...

  3. 论DELPHI跨平台中间件的策略

    论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...

  4. objective-c block 详解 转

    Block   Apple 在C, Objective-C, C++加上Block這個延申用法.目前只有Mac 10.6 和iOS 4有支援.Block是由一堆可執行的程式組成,也可以稱做沒有名字的F ...

  5. [Oracle] Insert All的妙用

    无条件的插入 Oracle中的insert all是指把同一批数据插入到不同的表中,假如如今有个需求:把t表中的数据分别插入t1,t2,假设你不知道insert all,你可能会使用insert插入2 ...

  6. Spring加载Hibernate 映射的几种方式及区别

    LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件: mappingResources.mappingLocations.mappingDirectoryLo ...

  7. SQL_求集合中每天最大时间记录的总和

    --问题求 集合中每天最大时间的总和 表中的数据 列: 用户 分数 时间 A 2 2014-01-01 01:00:00 A 2 2014-01-01 02:00:00 A 2 2014-01-01 ...

  8. [GIt] 团队工作效率分析工具gitstats

    copy : http://www.cnblogs.com/ToDoToTry/p/4311637.html 如果你是团队领导,关心团队的开发效率和工作激情:如果你是开源软件开发者,维护者某个repo ...

  9. Google Ads原理

    Google AdSense广告会根据访问者的地理IP,显示不同的广告,因为adwords里面有相应的设置,有些广告商只想把广告显示给某一地理区域的客户.另一方面就是同一个网站,你在日本和美国会看到日 ...

  10. sql的嵌套查询,把一次查询的结果做为表继续进一步查询;内联视图

    Mysql的嵌套表查询 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询可以: 出现在Where子句中, 出现在from子句中,作为一个临时表使用, ...