您的位置:首页 > 其它

HDOJ 5246 超级赛亚ACMer

2016-06-23 16:12 190 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246

中文题,题意不再解释。这题我们可以采取贪心去做,很显然我们每次都得达到和其中某一个人的战斗力相等才能增高我们的战斗力,我们的贪心策略就是说每次变更我们的战斗力为比我们战斗力+k低的最大的那个人的战斗力,关于查找,可以用C++库函数lower_bound去查找,也可以用二分去查找,不过这题由于数据很弱,我们直接暴力查找也能过。

#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL __int64
using namespace std;
LL a[10010];
int main()
{
int t;
int f=1;
scanf("%d",&t);
while (t--)
{
LL n,m,k;
int i;
scanf("%I64d%I64d%I64d",&n,&m,&k);
for (int i=1; i<=n; i++) scanf("%I64d",&a[i]);
printf("Case #%d:\n",f++);
sort(a+1,a+n+1);
if(a[1]>m)
{
printf("madan!\n");
continue;
}
if(a
<=m)
{
printf("why am I so diao?\n");
continue;
}
LL power=0;
int flag=0;
for(i=2; i<=n; i++)
{
if(flag==0)
{
if(a[i]>m)
{
power=a[i-1];
flag=1;
if(power+k<a[i])
break;
}
continue;
}
if(power+k<a[i])
{
power=a[i-1];
k--;
if(power+k<a[i])
break;
}
}
if(i>n) printf("why am I so diao?\n");
else printf("madan!\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: