Problem A. Game with pearls http://acmoj.shu.edu.cn/openjudge/viewproblem.php?coll_id=1&prob_id=350
贪心,每次选最小,看能否满足,用优先队列维护。
1 #include<cstdio> 2 #include<queue> 3 using namespace std; 4 struct G{ 5 int val; 6 friend bool operator <(G a,G b){ 7 return a.val>b.val; 8 } 9 }now; 10 priority_queue<G> q; 11 int main(){ 12 int t,n,k,x; 13 while(~scanf("%d",&t)){ 14 while(t--){ 15 scanf("%d%d",&n,&k); 16 while(!q.empty()) q.pop(); 17 for(int i=0;i<n;i++){ 18 scanf("%d",&x); 19 now.val=x; 20 q.push(now); 21 } 22 bool ans=true; 23 for(int i=1;i<=n;i++){ 24 bool flag=false; 25 while(!q.empty()){ 26 now=q.top(); 27 q.pop(); 28 if(now.val>i){ 29 break; 30 } 31 while(true){ 32 if(now.val>=i) break; 33 now.val+=k; 34 } 35 if(now.val==i){ 36 flag=true; 37 break; 38 } 39 q.push(now); 40 } 41 if(!flag){ 42 ans=false; 43 break; 44 } 45 } 46 if(ans) puts("Jerry"); 47 else puts("Tom"); 48 } 49 } 50 return 0; 51 }