首页 > 代码库 > HDU 5071 Chat (14鞍山区域赛 B) 模拟
HDU 5071 Chat (14鞍山区域赛 B) 模拟
题意:无力写了。
解题思路:纯模拟
解题代码:
1 // File Name: b.cpp 2 // Author: darkdream 3 // Created Time: 2014年10月22日 星期三 15时51分59秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 struct node{ 28 int x; 29 LL v ; 30 int ne , la; 31 }a[6004]; 32 char str[10]; 33 int first; 34 int last ; 35 int top = 0 ; 36 void print() 37 { 38 for(int i = a[0].ne;i != 6000 ;i = a[i].ne) 39 { 40 printf("%d %lld\n",a[i].x, a[i].v); 41 } 42 } 43 int find(int x) 44 { 45 //printf("%d\n",a[0].ne); 46 for(int i = a[0].ne;i != 6000 ;i = a[i].ne) 47 { 48 if(a[i].x == x) 49 return i ; 50 } 51 return 0 ; 52 } 53 int L; 54 void add(int x ) 55 { 56 if(find(x)) 57 { 58 printf("same priority.\n"); 59 }else { 60 printf("success.\n"); 61 L ++ ; 62 a[L].x = x; 63 a[L].v = 0 ; 64 a[L].ne = last; 65 a[L].la = a[last].la; 66 a[a[last].la].ne = L; 67 a[last].la = L; 68 } 69 } 70 void chat(int x) 71 { 72 if(a[first].ne == 6000) 73 { 74 printf("empty.\n"); 75 return; 76 } 77 printf("success.\n"); 78 if(top) 79 { 80 a[top].v += x; 81 }else { 82 a[a[first].ne].v += x; 83 } 84 } 85 void close(int x) 86 { 87 int k = find(x); 88 if(k) 89 { 90 printf("close %d with %lld.\n",a[k].x,a[k].v); 91 a[a[k].la].ne = a[k].ne; 92 a[a[k].ne].la = a[k].la; 93 if(a[k].x == top) 94 { 95 top = 0 ; 96 } 97 }else { 98 printf("invalid priority.\n"); 99 }100 }101 void rotata(int x)102 {103 int t = 1 ; 104 for(int i = a[first].ne ;i != last;i = a[i].ne)105 {106 if(t == x)107 {108 a[a[i].la].ne = a[i].ne;109 a[a[i].ne].la = a[i].la;110 111 a[i].ne = a[first].ne;112 a[i].la = first;113 a[a[first].ne].la = i;114 a[first].ne = i; 115 printf("success.\n");116 return;117 }118 t ++;119 }120 printf("out of range.\n");121 }122 void Prior()123 {124 if(a[first].ne == last)125 {126 printf("empty.\n");127 return;128 }129 int mx = 0 ; 130 int site = 0;131 for(int i = a[first].ne ;i != last;i = a[i].ne)132 {133 if(a[i].x > mx)134 {135 site = i ; 136 mx = a[i].x; 137 }138 }139 a[a[site].la].ne = a[site].ne;140 a[a[site].ne].la = a[site].la;141 142 a[site].ne = a[first].ne;143 a[site].la = first;144 a[a[first].ne].la = site;145 a[first].ne = site; 146 printf("success.\n") ; 147 }148 void choose(int x)149 {150 int site = find(x);151 if(site == 0 )152 {153 printf("invalid priority.\n");154 return;155 }156 a[a[site].la].ne = a[site].ne;157 a[a[site].ne].la = a[site].la;158 159 a[site].ne = a[first].ne;160 a[site].la = first;161 a[a[first].ne].la = site;162 a[first].ne = site; 163 printf("success.\n") ; 164 }165 void Top(int x)166 {167 int site = find(x);168 if(site == 0 )169 {170 printf("invalid priority.\n");171 return;172 }173 top = site;174 printf("success.\n") ; 175 }176 void Untop()177 {178 if(top == 0 )179 {180 printf("no such person.\n");181 return;182 }183 top = 0 ; 184 printf("success.\n") ; 185 }186 void say()187 {188 if(top)189 {190 if(a[top].v != 0 )191 printf("Bye %d: %lld\n",a[top].x,a[top].v);192 }193 for(int i = a[0].ne;i != last;i = a[i].ne)194 {195 if(i != top && a[i].v != 0 )196 printf("Bye %d: %lld\n",a[i].x,a[i].v);197 }198 }199 int main(){200 int t; 201 scanf("%d",&t);202 while(t--)203 {204 int n ;205 memset(a,0,sizeof(a));206 scanf("%d",&n);207 a[0].ne = 6000 ; 208 a[0].la = 6000; 209 a[6000].ne = 0;210 a[6000].la = 0;211 first = 0 ; 212 last = 6000;213 top = 0 ; 214 int tmp;215 L = 0 ; 216 for(int i = 1;i <= n;i ++)217 {218 scanf("%s",str);219 printf("Operation #%d: ",i);220 if(str[0] == ‘A‘)221 {222 scanf("%d",&tmp) ;223 add(tmp);224 }else if(str[0] == ‘C‘ && str[1] == ‘l‘)225 {226 scanf("%d",&tmp);227 close(tmp); 228 }else if(str[0] == ‘C‘ && str[1] == ‘h‘ && str[2] == ‘a‘)229 {230 scanf("%d",&tmp);231 chat(tmp); 232 }else if(str[0] == ‘R‘ && str[1] == ‘o‘)233 {234 scanf("%d",&tmp);235 rotata(tmp); 236 }else if(str[0] == ‘P‘ && str[1] == ‘r‘)237 {238 Prior();239 }else if(str[0] == ‘C‘ && str[1] == ‘h‘ && str[2] == ‘o‘)240 {241 scanf("%d",&tmp);242 choose(tmp);243 }else if(str[0] == ‘T‘)244 {245 scanf("%d",&tmp);246 Top(tmp);247 }else{248 Untop();249 }250 //print();251 }252 say();253 }254 return 0;255 }
HDU 5071 Chat (14鞍山区域赛 B) 模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。