首页 > 代码库 > hdu 5017
hdu 5017
好恶心的题
#include <cstdio>#include <string.h>#include <algorithm>#include <cmath>#include <set>using namespace std;typedef __int64 ll;struct point{ ll word,priori;}P[50005];char T[8][100]={ {"Add"},{"Close"},{"Chat"},{"Rotate"},{"Prior"},{"Choose"},{"Top"},{"Untop"}};int sz,op,always=-1;void per(int x){ point ttt = P[x]; for(int i=x; i>0; --i) P[i]=P[i-1]; P[0]=ttt;}void last(int x){ point ttt= P[x]; for(int i=x; i<sz-1; ++i) P[i]=P[i+1]; P[sz-1]=ttt;}void solve0(){ ll id; scanf("%I64d",&id); int loc=-1; for(int i=0; i<sz; ++i) if( P[i].priori == id ){ loc=i; break; } if( loc == -1 ){ P[sz].word=0; P[sz].priori=id; sz++; printf("Operation #%d: success.\n",op++); }else{ printf("Operation #%d: same priority.\n",op++); }}void solve1(){ ll id; scanf("%I64d",&id); int loc=-1; for(int i=0; i<sz; ++i) if(P[i].priori==id){ loc=i; break; } if(loc==-1){ printf("Operation #%d: invalid priority.\n",op++); }else { printf("Operation #%d: close %I64d with %I64d.\n",op++,P[loc].priori,P[loc].word); if(P[loc].priori==always) always=-1; for(int i=loc+1; i<sz; ++i) P[i-1]=P[i]; sz--; }}void solve2(){ ll id; scanf("%I64d",&id); if(sz==0){ ///***************************** printf("Operation #%d: empty.\n",op++); }else{ if(always!=-1){ for(int i=0; i<sz; ++i) if(P[i].priori==always){ P[i].word+=id; break; } }else P[0].word+= id; printf("Operation #%d: success.\n",op++); }}void solve3(){ ll id; scanf("%I64d",&id); id--; if( id<0 || id >= sz){ printf("Operation #%d: out of range.\n",op++); }else{ point ttt=P[id]; for(int i=id; i>0; --i) P[i]=P[i-1]; P[0]=ttt; printf("Operation #%d: success.\n",op++); }}void solve4(){ if(sz==0){ printf("Operation #%d: empty.\n",op++); }else{ int loc=0; ll hi=-1; for(int i=0; i<sz; ++i) if(P[i].priori>hi) hi=P[i].priori,loc=i; point ttt=P[loc]; for(int i=loc; i>0; --i) P[i]=P[i-1]; P[0]=ttt; printf("Operation #%d: success.\n",op++); }}void solve5(){ ll id; scanf("%I64d",&id); int loc=-1; for(int i=0; i<sz; ++i) if(P[i].priori==id){ loc=i; break; } if(loc==-1){ printf("Operation #%d: invalid priority.\n",op++); return; } point ttt=P[ loc ]; for(int i=loc; i>0; --i) P[i]=P[i-1]; P[0]=ttt; printf("Operation #%d: success.\n",op++);}void solve6(){ ll id; scanf("%I64d",&id); int loc=-1; for(int i=0; i<sz; ++i) if(P[i].priori==id){ loc=i; break; } if(loc==-1){ printf("Operation #%d: invalid priority.\n",op++); return; } always=id; printf("Operation #%d: success.\n",op++);}void solve7(){ if(always==-1){ printf("Operation #%d: no such person.\n",op++); return; } always=-1; printf("Operation #%d: success.\n",op++);}int main(){ int cas; scanf("%d",&cas); char str[100]; for(int cc= 1; cc<=cas; ++cc){ int n; scanf("%d",&n); always=-1; sz=0;op=1; for(int i=0; i<n; ++i){ scanf("%s",str); if(strcmp(str,T[0])==0) solve0(); else if(strcmp(str,T[1])==0) solve1(); else if(strcmp(str,T[2])==0) solve2(); else if(strcmp(str,T[3])==0) solve3(); else if(strcmp(str,T[4])==0) solve4(); else if(strcmp(str,T[5])==0) solve5(); else if(strcmp(str,T[6])==0) solve6(); else if(strcmp(str,T[7])==0) solve7(); // printf(".\n"); } if(always!=-1){ for(int i=0; i<sz; ++i) if(P[i].priori==always&&P[i].word!=0){ printf("Bye %I64d: %I64d\n",P[i].priori,P[i].word); break; } } for(int i=0; i<sz; ++i) if(P[i].priori!=always&&P[i].word!=0){ printf("Bye %I64d: %I64d\n",P[i].priori,P[i].word); } } return 0;}
hdu 5017
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。