分析:先把每个挑战者的战斗力升序排序,接着找出离m最近的小于m的挑战者的战斗力,然后从该处开始,对后面的每个挑战者进行处理,尽量使百小度提升战斗力后等于后一个挑战者的战斗力。如果激发战斗力后还无法打赢则不行,否则使其相等。
#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; }
原文地址:http://blog.csdn.net/a809146548/article/details/46311143