被这道题坑了一天,刚学贪心就做这种题真是难为我了,写了一个小时,改了六个小时BUG,我这个脑子啊。
刚开始思路是对对手战斗力排序,为了不限制K的成长,百小度的初始值设为 所有对手中小于m的最大值,然后往后找,如果碰上小于他的,先不管以免浪费“潜能”,自我感觉思路没有漏洞,结果学长扔给我这么一组数据:
5 11 5
11 12 13 17 18
于是就有了下面我机(ruo)智(zhi)的对话
那个表情包真的让我感到了智商的差距
附上大神博客: 点击打开链接
后来就只能换思路了,,,
战斗力初值还是那样设置,贪心的法则是升到和他一样,若能搞掉最后一个就赢
注释掉的是之前的错代码
#include<stdio.h>
#include<algorithm>
using namespace std;
long long a[100050];
int main()
{
int T;
scanf("%d",&T);
int t=1;
while(T--)
{
long long n,m,k;
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
sort(a,a+n);
printf("Case #%d:\n",t++);
if(m<a[0])
{
printf("madan!\n");
continue;
}
if(m>a[n-1])
{
printf("why am I so diao?\n");
continue;
}
// int left=0,right=z-1;
// int mid,ans=0;
// while(left<=right)
// {
// mid=(left+right)/2;
// if(a[mid]<=m)
// {
// ans=a[mid];
// left=mid+1;
// }
// else
// {
// right=mid-1;
// }
// }
// m=ans;
// m+=k;
// k--;
int flag=0,i;
for(i=0; i<n; )
{
if(m>=a[i])
{
i=i+1;
}
else
{
m=a[i-1]+k;
if(m<a[i])
break;
else
i=i+1;
k--;
}
if(i==n)
{
flag=1;
break;
}
}
if(flag==1)
printf("why am I so diao?\n");
else
printf("madan!\n");
}
return 0;
}