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 }

时间: 2024-10-06 10:16:23

HDU 5071 Chat (14鞍山区域赛 B) 模拟的相关文章

HDU 5071 Chat(2014鞍山B,模拟)

http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 702    Accepted Submission(s): 163 Problem Description As everyone knows, DRD has no girlfr

HDU 5071 Chat(2014鞍山赛区现场赛B题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口标记为一种特殊的状态,在这种特殊的状态下优先级是最高的,聊天都是跟这个聊,而这个窗口并没有在实际上被提到最前面.还有就是每句后面都有句号.我本来可以1A的,但就是因为没看这个,所以一直WA也找不到原因. 暴力模拟就可以了,因为点最多只有5000个,不会超时,维护一个队列就可以了,但我为了方便判断是不

HDU 5074 Hatsune Miku(14鞍山区域赛 E)DP

题意:给定一个序列 有些位数未知,给你如果两个数连续所得到的能量,问你怎么安排数字使得总能量最大 解题思路:dp,只与上一个字母有关. 解题代码: 1 // File Name: e.cpp 2 // Author: darkdream 3 // Created Time: 2014年10月22日 星期三 12时16分10秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set&g

hdu 5073 Galaxy(14鞍山区域赛 D) 二分 + 递推

题意:给定你一条直线,直线上面有n个点,你可以移动k个点,求所有点到重心距离的平方和最小值为多少. 解题思路:这里可以知道 保持一段不移动然后把所有的点都移动到这一段的重心才是最优解,那我们很容易想到枚举这一段的端点,但是如果枚举端点,时间复杂度会高达 n^2,所以我们要知道区间之间的关系,假设 lsum ,rsum  ,lans,rans ,分别为 重心左右的 距离和 和重心左右的平方和,然后每次移动找重心位置,再算 这四个值之间的递推关系就行了. 解题代码: 1 // File Name:

14西安区域赛总结帖

14西安区域赛总结帖 ACM 第一次打区域赛,终于可以好好地写一篇总结帖了. 总结帖=口水帖?差不多吧.(在我离开的时候发生了些事情,我现在心情不是很好,我就随便水水吧) 文章结构就用总分总吧. 西安之行在各个方面让我涨了不少姿势. 这次的比赛个人感觉还不错,至少没有发挥失常,而且顺利拿到了铜牌.(感动ing,其实已经做好了打铁的准备,多谢学妈.表妹.zlx.wjx等童鞋的赛前加的buff) 出发前. 比赛前这阶段是非常忙的,要应付各种事情.但是我还是腾出了很多时间来准备比赛,说是准备其实是临时

hdu5080:几何+polya计数(鞍山区域赛K题)

/* 鞍山区域赛的K题..当时比赛都没来得及看(反正看了也不会) 学了polya定理之后就赶紧跑来补这个题.. 由于几何比较烂写了又丑又长的代码,还debug了很久.. 比较感动的是竟然1Y了.. */ 题目大意: 给定一些点,某些点上有边,问用k种颜色染色的等价类有多少种 思路: 由于坐标是整数..只有可能旋转90,180,270才能得到置换 且图形必须为中心对称图形 先用几何方法找出对称中心 然后旋转,找是否出现置换... 由于点数只有50,几何预处理这一部分可以很暴力无脑的写..各种判断相

hdu 5071 Chat(模拟)

题目链接:hdu 5071 Chat 题目大意:模拟题...注意最后说bye的时候只要和讲过话的妹子说再见. 解题思路:用一个map记录每个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A和N记录等级的顺序,增加 删除等操作完全可以同过数组上的模拟,时间足够.T和flag标记是否有置顶窗口. #include <cstdio> #include <cstring> #include <map> #include <vector> #include <

鞍山区域赛的总结+反思

玩acm大概也有半年了吧,大概是从大一下学期中后段的那一段时间开始接触acm的,暑假参加了集训之后,就开始了区域赛的网络赛的选拔,哎弱校没人权,最终组好的队伍也就那么四五队,弱校的acm氛围简直太差了,无法吸引很多的学生一起来玩耍,网络赛选拔的时候我们队是零贡献的,因为,有些师兄队要和我们共用一个账号,那些水题往往被他们很快先ac掉了,难题我们又做不了,只能让师兄们去做,多亏了他们,让scnu的每个区域赛都获得了现场赛的名额.哎 牡丹江凑不齐人数,结果最终只能放弃这个赛区了.两个字,弱校----

HDU 5071 Chat (神一般的模拟题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 题面: Chat Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 2195    Accepted Submission(s): 465 Problem Description As everyone knows, DRD has