首页 > 代码库 > HDU 5071 Chat
HDU 5071 Chat
这题没什么好说的:只要维护几个值就好了,因为属性是唯一而且不会改变的所以用Map 来映射下就好了,留下代码备用
1 #include <cstdio> 2 #include <cmath> 3 #include <algorithm> 4 #include <iostream> 5 #include <cmath> 6 #include <map> 7 #include <set> 8 #include <cstring> 9 using namespace std; 10 typedef long long LL; 11 map<int,int>Hash; 12 set<int>SET; 13 map<int,int>::iterator it; 14 set<int>::iterator it_set; 15 struct info 16 { 17 int w; 18 LL t; 19 info(int w,LL t):w(w),t(t){} 20 info(){t=0;} 21 }; 22 info que[50050]; 23 int pos,top; 24 void inint() 25 { 26 Hash.clear(); 27 SET.clear(); 28 top=-1; 29 pos=0; 30 } 31 void Rotate(int p,bool flag) 32 { 33 if(p<1||p>pos){ printf("out of range");return;} 34 if(flag)printf("success"); 35 info t=que[p]; 36 for(int i=p;i>=2;i--) 37 { 38 que[i]=que[i-1]; 39 it=Hash.find(que[i].w); 40 Hash.erase(it); 41 Hash[que[i].w]=i; 42 } 43 que[1]=t; 44 it=Hash.find(que[1].w); 45 Hash.erase(it); 46 Hash[que[1].w]=1; 47 } 48 void Choose(int p) 49 { 50 int t=Hash[p]; 51 if(t==0){printf("invalid priority");return;} 52 printf("success"); 53 Rotate(Hash[p],false); 54 } 55 56 void Prior() 57 { 58 if(pos==0){printf("empty");return;} 59 printf("success"); 60 it_set=SET.end(); 61 it_set--; 62 int num=*it_set; 63 Rotate(Hash[num],false); 64 } 65 void Add(int p) 66 { 67 if(Hash[p]!=0){printf("same priority");return;} 68 printf("success"); 69 que[++pos]=info(p,0); 70 Hash[p]=pos; 71 SET.insert(p); 72 } 73 void Close(int p) 74 { 75 if(Hash[p]==0){printf("invalid priority");return;} 76 int t=Hash[p]; 77 if(que[t].w!=p) while(1){} 78 printf("close %d with %d",p,que[t].t); 79 if(top==p){while(1){} top=-1;} 80 it=Hash.find(p); 81 Hash.erase(it); 82 SET.erase(p); 83 for(int i=t;i<pos;i++) 84 { 85 que[i]=que[i+1]; 86 it=Hash.find(que[i].w); 87 Hash.erase(it); 88 Hash[que[i].w]=i; 89 } 90 pos--; 91 } 92 void Chat(int p) 93 { 94 if(pos==0){printf("empty");return;} 95 printf("success"); 96 if(top==-1)que[1].t+=p; 97 else 98 { 99 int tmp=Hash[top];100 que[tmp].t+=p;101 }102 }103 void Top(int p)104 {105 if(Hash[p]==0){printf("invalid priority");return;}106 printf("success");107 top=p;108 }109 void Untop()110 {111 if(top!=-1) {printf("success");top=-1;return;}112 printf("no such person");113 }114 int main()115 {116 int t;117 scanf("%d",&t);118 char op[10];119 int a,b,c;120 while(t--)121 {122 int ca=1;123 inint();124 int n;125 scanf("%d",&n);126 for(int i=1;i<=n;i++)127 {128 bool flag=true;129 printf("Operation #%d: ",ca++);130 scanf("%s",op);131 if(strcmp(op,"Untop")==0) {Untop();flag=false;}132 if(strcmp(op,"Prior")==0) {Prior();flag=false;}133 if(flag)scanf("%d",&c);134 if(strcmp(op,"Add")==0) Add(c);135 if(strcmp(op,"Close")==0) Close(c);136 if(strcmp(op,"Chat")==0) Chat(c);137 if(strcmp(op,"Rotate")==0) Rotate(c,true);138 if(strcmp(op,"Choose")==0) Choose(c);139 if(strcmp(op,"Top")==0) Top(c);140 puts(".");141 }142 int tt=Hash[top];143 if(top!=-1)144 {145 if(tt!=0&&que[tt].t!=0)146 printf("Bye %d: %I64d\n",que[tt].w,que[tt].t);147 }148 for(int i=1;i<=pos;i++)149 {150 if(i==tt) continue;151 if(que[i].t==0) continue;152 printf("Bye %d: %I64d\n",que[i].w,que[i].t);153 }154 }155 return 0;156 }
HDU 5071 Chat
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。