HDU ACM 5246スーパーサイヤACMer欲張り
分析:まず各挑戦者の戦闘力を昇順に並べ替え、次にmに最も近いmより小さい挑戦者の戦闘力を見つけ、そこから、後ろの各挑戦者を処理し、できるだけ100度戦闘力を向上させた後、次の挑戦者の戦闘力に等しいようにする.戦闘力を奮い立たせても勝てなければだめだ.そうしないと等しくなる.
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int T,t,n,m,k,i;
__int64 a[10005];
__int64 cnt;
int tmp;
bool fg;
cin>>T;
t=0;
while(T--)
{
cin>>n>>m>>k;
for(i=0;i<n;i++)
scanf("%I64d",&a[i]);
sort(a,a+n); //
cout<<"Case #"<<++t<<":"<<endl;
if(a[0]>m)
{
puts("madan!");
continue;
}
if(a[n-1]<=m)
{
puts("why am I so diao?");
continue;
}
fg=true;
cnt=m;
for(i=0;i<n;i++)
if(a[i]>m)
{
cnt=a[i-1];
tmp=i;
break;
}
for(i=tmp;i<n;i++)
if(cnt+k<a[i])
{
fg=false;
break;
}
else
{
cnt=a[i];
if(k>0) k--;
}
if(fg) puts("why am I so diao?");
else puts("madan!");
}
return 0;
}