これはやるだけなんだけど、そのやるだけが非常に面倒。Div2は楽だったんだけどね……
JavaのQueueが面倒なつくりなのでC++のQueueつかいました。初めての黄色点。
#include<queue> #include<cstdio> using namespace std; class LockersDivOne{ public: int lastOpened(int a){ queue <int>q; for(int i=1;i<=a;i++){ q.push(i); } int now=1; int count=0; while(q.size()>1){ int c=q.size(); int last; //printf("%d\n",c/(now+1)); for(int i=0;i<=c/(now+1);i++){ count=now; //printf("%d\n",q.front()); last=q.front(); q.pop(); if(q.size()==1)return q.front(); if(q.front()<last)break; while(count--){ //printf("THOROUGH %d\n",q.front()); last=q.front(); q.push(q.front()); q.pop(); if(q.size()==1)return q.front(); if(q.front()<last)goto takeshi; } } //q.pop(); takeshi: //printf("OK\n"); now++; } return q.front(); } };
どうして157.64点しか取れないの