考察英语的题 - -#

按条件模拟,一遍即可了,每一个聊天对象有其价值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. python之路:发附带文件的邮件

    发邮件的思路(借用第三方服务): 1.模拟服务器,其中有:服务器地址,发送者地址.发送者的密码 2.创建一个带附件的实例:1.创建一个massage 2.massage包括发送者的地址.接受者的地址. ...

  2. Yeslab 华为安全HCIE-第五门-防火墙攻击防范技术

    Yeslab 华为安全HCIE-第五门-防火墙攻击防范技术 课程目录 Yeslab华为安全HCIE-第五门-防火墙攻击防范技术(8篇)\1_单包攻击防范.aviYeslab华为安全HCIE-第五门-防 ...

  3. html ---- a 标签 在新窗口打开的问题

  4. 1.STL list

    初始化一个链表 list<,,,, }; 链表排序 mylist.sort(); 链表反转 mylist.reverse(); 链表删除头部和尾部 mylist.pop_back();//删除尾 ...

  5. go channel实现

    go channel实现 Go语言经过多年的发展,于最近推出了第一个稳定版本.相对于C/C++来说,Go有很多独特之出,比如提供了相当抽象的工具,如channel和goroutine.本文主要介绍ch ...

  6. 搭建 Docker 环境

  7. kali之Nmap (Network Mapper(网络映射器)

    Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp. Nmap可以完成以下任务: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 Nmap在实际中应用场合如下: ...

  8. day 5 集合

    # -*- coding: utf_8 _*_# Author:Vi#集合是无序的 list_1 = [1,2,3,2,3,5,7]list_1 = set(list_1)#将列表转变成集合list_ ...

  9. 微信小程序从零开始开发步骤(七)引入外部js 文件

    上一章讲到小程序页面的四种常见的跳转的方法,这一章写如何引入一个外部的js文件,既utils文件夹的用处,其实步骤很简单: 1:准备好外部想要引入的外部文件,命名为util.js,并且填充固定的文件内 ...

  10. [置顶] Docker学习总结(3)——Docker实战之入门以及Dockerfile(三)

    应用镜像 csphere/wordpress:4.2 # cd docker-training/wordpress/ # ls -a . license.txt wp-config-sample.ph ...