考察英语的题 - -#

按条件模拟,一遍即可了,每一个聊天对象有其价值U。数组模拟队列过程即可,若存在Top标记,则和Top标记的人聊天,否则和队列的第一个人聊天

mark记录队尾,top记录Top操作,data[i].p记录U,data[i].x记录chat数。data[i].y记录该人是否被删除

Add U:在 队尾插入价值为U的人,须要特判U人已经存在

Close U::在整个队列中查找价值为U的人,将其删除。须要特判该人不存在

Chat x:当前聊天页面的人chat+=x,特判当前队列没有人

Rotata x: 使当前队列排在第x位的人放在第1位,其余的依次向后退一位。特判没有第x位

Prior: 找出当前队列中价值最大的人,把其放在第1位,其余的依次向后退一位。特判队列空

Choose U:找到价值为U的人。把其放在第1位,其余的依次向后退一位,特判没有该价值的人

Top U:标记价值为U的人,将其标为top,始终与她聊天,但不放到队列第一位,直到Untop。特判没有这个人

Untop:取消TOP标记,并回复与队列第一位聊天,特判当前没有Top标记

最后全部指令运行完后

须要从队列第一位依次和还没有Close而且Chat!

=0的人  运行Bye操作,若有Top,先和Top-Bye

Bye:输出当前人的U和chat数

#include "stdio.h"
#include "string.h" struct node
{
int p,y;
__int64 x;
}data[50010]; int mark,top;
void Add()
{
int ok,x,i;
ok=1;
scanf("%d",&x); for (i=1;i<=mark;i++)
if (data[i].y==0 && data[i].p==x) { ok=0; break;} if (ok==0)
{
printf("same priority.\n");
return ;
}
printf("success.\n"); mark++;
data[mark].p=x;
data[mark].x=0;
} void Close()
{
int ok,x,i;
ok=0;
scanf("%d",&x);
for (i=1;i<=mark;i++)
if (data[i].y==0 && data[i].p==x) { ok=i; break;} if (ok==0)
{
printf("invalid priority.\n");
return ;
} data[i].y=1;
if (top==ok) top=0;
printf("close %d with %I64d.\n",data[ok].p,data[ok].x);
} void Chat()
{
int ok,i;
__int64 x;
scanf("%I64d",&x);
if (top!=0)
{
data[top].x+=x;
printf("success.\n");
return ;
} ok=0;
for (i=1;i<=mark;i++)
if (data[i].y==0) {ok=i; break;}
if (ok==0)
printf("empty.\n");
else printf("success.\n"); data[ok].x+=x; } void Rotate()
{
node temp;
int cnt,j,x,i,first;
cnt=0;
scanf("%d",&x);
first=0;
for (i=1;i<=mark;i++)
if (data[i].y==0)
{
if (first==0) first=i;
cnt++;
if (cnt==x) break;
} if (cnt==x)
{
printf("success.\n");
temp=data[i];
if (top==i) top=1;
else
if (top!=0 && top<i) top++;
for (j=i;j>1;j--)
data[j]=data[j-1];
data[1]=temp;
return ;
} printf("out of range.\n");
} void Prior()
{
int Max,i,id;
node temp;
Max=0;
if (mark==0)
{
printf("empty.\n");
return ;
}
for (i=1;i<=mark;i++)
if(data[i].y==0 && data[i].p>Max)
{
Max=data[i].p;
id=i;
}
if (Max==0)
{
printf("empty.\n");
return ;
} printf("success.\n");
temp=data[id];
if (top==id) top=1;
else
if (top!=0 && top<id ) top++; for (i=id;i>1;i--)
data[i]=data[i-1];
data[1]=temp;
} void Choose()
{
int ok,x,i,first;
node temp;
scanf("%d",&x);
ok=0;
first=0;
for (i=1;i<=mark;i++)
if(data[i].y==0)
{
if (first==0) first=i;
if (data[i].p==x)
{
ok=i;
break;
}
}
if (ok==0)
{
printf("invalid priority.\n");
return ;
} temp=data[ok];
if (top==ok) top=1;
else
if (top!=0 && top<ok ) top++; for (i=ok;i>1;i--)
data[i]=data[i-1];
data[1]=temp;
printf("success.\n");
} void Top()
{
int i,ok,x;
scanf("%d",&x);
ok=0;
for (i=1;i<=mark;i++)
if (data[i].y==0 && data[i].p==x)
{
top=i;
ok=1;
break;
} if (ok==1) printf("success.\n");
else printf("invalid priority.\n");
} void Untop()
{
if (top==0) printf("no such person.\n");
else printf("success.\n");
top=0;
} int main()
{
int Case,ii,i,n;
char str[101];
scanf("%d",&Case);
while(Case--)
{
scanf("%d",&n);
mark=0; top=0;
memset(data,0,sizeof(data));
for (ii=1;ii<=n;ii++)
{
scanf("%s",str);
printf("Operation #%d: ",ii);
if (strcmp(str,"Add")==0) Add();
if (strcmp(str,"Close")==0) Close();
if (strcmp(str,"Chat")==0) Chat();
if (strcmp(str,"Rotate")==0) Rotate();
if (strcmp(str,"Prior")==0) Prior();
if (strcmp(str,"Choose")==0) Choose();
if (strcmp(str,"Top")==0) Top();
if (strcmp(str,"Untop")==0) Untop();
}
if (top!=0 && data[top].x!=0)
{
printf("Bye %d: %I64d\n",data[top].p,data[top].x);
data[top].y=1;
}
for (i=1;i<=mark;i++)
if (data[i].y==0 && data[i].x!=0)
printf("Bye %d: %I64d\n",data[i].p,data[i].x);
}
return 0;
}

HDU 5071 模拟的更多相关文章

  1. hdu 5071 Chat(模拟)

    题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...

  2. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

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

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. hdu 5071 vector操作恶心模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 对于每一个窗口,有两个属性:优先级+说过的单词数,支持8个操作:新建窗口,关闭窗口并输出信息,聊天(置顶窗 ...

  5. HDU - 5071 Chat(模拟)

    原题链接 题意:有各种操作,模拟这个程序并输出每次操作的信息 分析:恶心模拟题...用个map记录一下各个等级女孩的谈话数,同时也便于查找权值为u的在不在队列里.因为n很小,其他就暴力模拟了. #in ...

  6. hdu 5071 Chat(模拟|Splay)

    Chat Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 解题报告:一个管理聊天窗口的程序,一共有八种操作,然后要注意的就是Top操作只是把编号为u的窗口 ...

  8. hdu 5071 Chat-----2014acm亚洲区域赛鞍山 B题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. hdu 4891 模拟水题

    http://acm.hdu.edu.cn/showproblem.php?pid=4891 给出一个文本,问说有多少种理解方式. 1. $$中间的,(s1+1) * (s2+1) * ...*(sn ...

随机推荐

  1. rman 备份并异机恢复

    1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...

  2. whereis---定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

    whereis命令用来定位指令的二进制程序.源代码文件和man手册页等相关文件的路径. whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件 ...

  3. Django_视图操作

  4. 最近遇到的若干Web前端问题:disable和readonly,JqueryEasyUI,KindEditor

    最近项目中用到了Jquery Easyui和KindEditor等框架组件,问题真不少啊~  一些看起来很简单理所当然的事情,竟然花费了不少时间,才解决好~  1.readonly和disable的区 ...

  5. 洛谷 P3887 [GDOI2014]世界杯

    P3887 [GDOI2014]世界杯 题目描述 3014年世界杯足球赛就要开始了!作为卫冕冠军中国足球队的教练,手下每位球员都是猛将,如何摆出最强的11人阵容也是一件幸福的烦恼事啊. 众所周知,足球 ...

  6. 深入浅出WPF 第一部分(3)

    3.2.3 属性元素 <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> ...

  7. 9.Java通过axis调用WebService

    转自:https://www.cnblogs.com/fu-yun/p/4553685.html 包含:axis.jar,commons-discovery.jar,commons-logging-1 ...

  8. SpringMVC-@RequestMapping的参数和用法

    RequestMapping里面的注解包含的参数如图: RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. ...

  9. C/C++(结构体)

    结构体(struct) 从某种意义上说,会不会使用struct,如何使用struct是区别一个开发人员是否具备丰富开发经验的试金石. 处理由不同类型成员构成的构造类型,要采用结构体的方式. 定义:关键 ...

  10. WebMethod Description

    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx https://www.cnblogs.com/wanganyi/p/72202 ...