HDOJ 5071 Chat 模拟(四)

2015-01-27 22:35:38 · 作者: · 浏览: 110
50bGVtYW4sIENMSiB3aWxsIHNheSBnb29kYnllIHRvIGV2ZXJ5IGFjdGl2ZSB3aW5kb3cgaGUgaGFzIGV2ZXIgc3Bva2VuIHRvIGF0IGxhc3QsIKGwYWN0aXZlobEgaGVyZSBtZWFucyB0aGUgd2luZG93IGhhcyBub3QgYmVlbiBjbG9zZWQgc28gZmFyLiBUaGUgbG9nZ2luZyBmb3JtYXQgaXMgobBCeWUgdTogY6GxIHdoZXJlIHUgaXMgdGhlIHByaW9yaXR5IGFuZCBjIGlzIHRoZSBudW1iZXIgb2Ygd29yZHMgaGUgaGFzIGV2ZXIgc3Bva2VuIHRvCiB0aGlzIHdpbmRvdy4gSGUgd2lsbCBhbHdheXMgc2F5IGdvb2QgYnllIHRvIHRoZSBjdXJyZW50IHRvcCBnaXJsIGlmIGhlIGhhcyBzcG9rZW4gdG8gaGVyIGJlZm9yZSBoZSBjbG9zZXMgaXQuCgogCjxicj4KCklucHV0CgpUaGUgZmlyc3QgbGluZSBjb250YWlucyBhbiBpbnRlZ2VyIFQgKFQgodwgMTApLCBkZW5vdGluZyB0aGUgbnVtYmVyIG9mIHRoZSB0ZXN0IGNhc2VzLjxicj4KPGJyPgpGb3IgZWFjaCB0ZXN0IGNhc2UsIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFuIGludGVnZXIgbigwIDwgbiCh3CA1MDAwKSwgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucy4gVGhlbiBmb2xsb3cgbiBvcGVyYXRpb25zLCBvbmUgaW4gYSBsaW5lLiBBbGwgdGhlIHBhcmFtZXRlcnMgYXJlIHBvc2l0aXZlIGludGVnZXJzIGJlbG93IDEwPHN1cD45PC9zdXA+LgoKIAo8YnI+CgpPdXRwdXQKCk91dHB1dCBhbGwgdGhlIGxvZ2dpbmcgY29udGVudHMuCgogCjxicj4KClNhbXBsZSBJbnB1dAoKPHByZSBjbGFzcz0="brush:java;">1 18 Prior Add 1 Chat 1 Add 2 Chat 2 Top 2 Chat 3 Untop Chat 4 Choose 2 Chat 5 Rotate 2 Chat 4 Close 2 Add 3 Prior Chat 2 Close 1
Sample Output
Operation #1: empty.
Operation #2: success.
Operation #3: success.
Operation #4: success.
Operation #5: success.
Operation #6: success.
Operation #7: success.
Operation #8: success.
Operation #9: success.
Operation #10: success.
Operation #11: success.
Operation #12: success.
Operation #13: success.
Operation #14: close 2 with 8.
Operation #15: success.
Operation #16: success.
Operation #17: success.
Operation #18: close 1 with 11.
Bye 3: 2

HintThis problem description does not relate to any real person in THU. 

Source 2014 Asia AnShan Regional Contest



#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; typedef long long int LL; const int INF=0x3f3f3f3f; const int HEAD=0; const int TAIL=6400; struct CHART { int pro,front,back; LL w; }chat[6500]; int n,x,id; int alwayson; set
       
         pc; char cmd[50]; void init() { id=1;pc.clear();alwayson=-1; memset(chat,0,sizeof(chat)); chat[HEAD].front=HEAD; chat[HEAD].back=TAIL; chat[TAIL].front=HEAD; chat[TAIL].back=TAIL; chat[HEAD].pro=-INF-1; chat[TAIL].pro=-INF-1; } void Add(int u) { if(pc.count(u)) { puts("same priority."); return ; } pc.insert(u); chat[id].w=0; chat[id].pro=u; chat[id].front=chat[TAIL].front; chat[id].back=TAIL; chat[chat[TAIL].front].back=id; chat[TAIL].front=id; id++; puts("success."); } void Close(int u) { if(pc.count(u)==0) { puts("invalid priority."); return ; } pc.erase(u); if(alwayson==u) alwayson=-1; int pos=HEAD; for(pos=HEAD;pos!=TAIL;pos=chat[pos].back) { if(chat[pos].pro==u) break; } int bc=chat[pos].back; int ft=chat[pos].front; chat[bc].front=ft; chat[ft].back=bc; printf("close %d with %I64d.\n",chat[pos].pro,chat[pos].w); } void Chat(int w) { if(chat[HEAD].back==TAIL) { puts("empty."); return ; } puts("success."); int u=-1; if(alwayson!=-1) u=alwayson; else u=chat[chat[HEAD].back].pro; int pos=HEAD; for(pos=HEAD;pos!=TAIL;pos=chat[pos].back) { if(chat[pos].pro==u) break; } chat[pos].w+=w; } void Rotate(int x) { if(x<1||x>pc.size()) { puts("out of range."); return ; } puts("success."); int pos=HEAD,i=0; for(pos=HEAD;