之前用了个nlogn的算法超时了。仅仅能改成n的算法了
大题贪心思路就是 对每一个人的能力值从小到大进行排序,当前能力值为now,那么我们找到一个人的能力使得这个能力值 <= now。now + 这个人的能力值继续找
这样都跑了600+MS。看来之前nlogn的TLE的不冤枉。
。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 10005; LL arr[maxn]; LL m,k; int n; int main(){ int T,Case = 1; scanf("%d",&T); while(T--){ scanf("%d%I64d%I64d",&n,&m,&k); for(int i = 0; i < n; i++) scanf("%I64d",&arr[i]); sort(arr,arr + n); LL now = m; int ok = 0; printf("Case #%d: ",Case++); if(m < arr[0]){ printf("madan! "); continue; } for(int i = 0; i < n; ){ if(arr[i] <= now) i ++; else{ now = arr[i - 1] + k; if(now < arr[i]) break; else i++; k --; } if(i == n){ ok = 1; break; } } if(ok) printf("why am I so diao? "); else printf("madan! "); } return 0; }