CF749C Voting

题目链接:

http://codeforces.com/problemset/problem/749/C

题目大意:

共有n个人,编号为1~n。他们每个人属于且仅属于R阵营或N阵营中的一个。现在他们要进行一场投票。投票可能进行多轮,每一轮投票都是按照从1~n的顺序,当轮到某一人投票的时候,他可以什么都不做,也可以随便挑选一人使他丧失投票的权利。每个人都会代表自己阵营的利益。一个人如果丧失了投票权利,则他直到这场投票结束都不能再投票。投票直到某一阵营一个人都没有的时候就会结束,此时一个人都没有的阵营失败,另一个阵营获胜。

现在给定每个人所属的阵营,问最后哪个阵营会获胜。

解题思路:

采用贪心的思路,每个人都干掉自己后面投票的第一个对手。

具体来说就是用两个队列来模拟两个阵营。分别为D-队列和R-队列。初始分别按顺序加入自己阵营的所有人的编号。每次队头的两个人pk,编号小的一方获胜,将获胜方编号+n并且push到队尾(表示本轮投票结束,将进行下轮投票),失败方直接从本方队列中pop掉即可。最终队列空的一方失败,另一方获胜。

代码:

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6
 7 int n;
 8 string s;
 9
10 int main()
11 {
12     cin >> n >> s;
13     queue<int> qd, qr;
14     for (int i = 0; i < n; i++)
15     {
16         if (s[i] == ‘D‘)
17         {
18             qd.push(i);
19         }
20         else
21         {
22             qr.push(i);
23         }
24     }
25     while (!qd.empty() && !qr.empty())
26     {
27         if (qd.front() < qr.front())
28         {
29             qr.pop();
30             qd.push(qd.front() + n);
31             qd.pop();
32         }
33         else
34         {
35             qd.pop();
36             qr.push(qr.front() + n);
37             qr.pop();
38         }
39     }
40     if (qd.empty())
41     {
42         cout << "R" << endl;
43     }
44     else
45     {
46         cout << "D" << endl;
47     }
48     return 0;
49 }
时间: 2024-11-09 20:16:52

CF749C Voting的相关文章

如何恢复,迁移,添加, 删除 Voting Disks

如何恢复,迁移,添加, 删除 Voting Disks恢复流程 在11gR2 之前,我们可以直接直接使用dd命令对voting disk进行备份.DD示例 备份votedisk盘:[[email protected] bin]# dd if=/dev/raw/raw2 of=/home/oracle/voting_disk.bak 恢复votedisk盘:[[email protected] bin]# dd if=/home/oracle/voting_disk.bak of=/dev/raw

Oracle voting文件的管理

在12c中,不再支持使用dd命令进行voting disk文件的备份和恢复 投票文件的管理需要OCR文件正常工作.在删除.添加.替换或者还原voting文件之前,使用ocrcheck检查ocr文件的状态.如果ocr不可用的话,必须先还原ocr. 1.备份voting文件 voting文件的备份会随着备份OCR的时候,一起备份. 2.还原voting文件(1)在某个节点以排他模式启动clusterware # crsctl start crs -excl 排他模式不需要voting文件 (2)查看

11g RAC OCR,VOTING DISK存储全部损坏,利用自动备份,恢复OCR,VOTING DISK到新存储。

背景: 11g R2 rac 的orc ,voting disk asm存储磁盘全部损坏.通过调查得知 损坏的 OCR磁盘对应为 VOL1 ,voting disk磁盘对应于 VOL2  . 故,添加asm新存储(过程省略),设置为旧配置名 VOL1,VOL2 . /usr/sbin/oracleasm createdisk VOL1 /dev/sdb1/usr/sbin/oracleasm createdisk VOL2 /dev/sdc1 [[email protected] bin]#  

Voting CodeForces - 749C

有点意思的题 Voting CodeForces - 749C 题意:有n个人投票,每次按照第1个人~第n个人的顺序发言,如果到某个人发言时他已经被禁止发言就跳过,每个人发言时可以禁止另一个人发言或什么也不做.最后只剩下一个人时,那个人的意见就是最终决定的意见.这些人分为D和R两派,也就是每个人有D和R两种意见中的一种,每一派的人都希望自己派的意见成为最终意见.假设每个人都作出最优选择,请根据每个人的派别判断最终决定的意见. 方法:第i个人发言的时候,就按照第i~第n,第1~第i-1的顺序找出第

UVA 10142 Australian Voting(模拟)

题意:澳大利亚投票系统要求选民们将所有候选人按愿意选择的程度排序,一张选票就是一个排序.一开始,每张选票的首选项将被统计.若有候选人得票超过50%,他讲直接胜出:否则,所有并列最低的候选人出局,而那些将出局候选人排在第一位的选票将被重新统计为排名最高的未出局候选人.这一筛选过程将持续进行,直到某个候选人得到超过50%的选票,或所有候选人得票相同. #include<cstdio> #include<cstring> #include<iostream> #include

集群仲裁盘voting disk的原理

我们在配置各种cluster系统时总会要求配置仲裁盘(oracle叫voting disk,IBM GPFS里边叫tiebreaker).那么为什么cluster必须配置仲裁盘,它有什么作用呢? 集群(cluster)也就是由多个节点组成的一个协同工作的系统.就像人一样,一个人的力量是有限的,把许多人召集在一起才能做大事业,因此人类社会才有了政府.公司等组织形式的出现.目前常见的计算机集群软件有Oracle RAC,IBM HACMP, IBM GPFS文件系统,VMware vSphere里边

windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境怎样恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 能够放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 假设原来的ocr 位置已经不存在,则必须使用同样的名字在原来同样的位置创建一个空 OCR . 建议使用下面步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa

管理voting disks

 管理voting disks 一.关于voting disk 的一些必须要知道的东西: 11g 以前我们可以使用dd 命令来备份voting disk ,但是在11g 以后 oracle 不再支持使用 dd 来备份voting disk. 如果使用 dd or cp 命令可能会破坏 集群件堆栈的正常启动. voting disk 会作为OCR的一部分自动备份,并且当有新 voting disk 添加时会自动恢复上去. *在维护voting disk前,必须要保证有可用的ocr,ocr 的状

windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群

 windows 环境如何恢复 (oracle 11g grid) ocr voting 损坏的集群 oracle 11g 以后 ocr 可以放到 asm 磁盘上,而ASM的启动依赖于ocr和votedisk,所以在丢失ocr或votedisk 会导致cluter无法正常启动 如果原来的ocr 位置已经不存在,则必须使用相同的名字在原来相同的位置创建一个空 OCR . 建议使用以下步骤来恢复OCR: 1.确定当前集群节点数 C:\>olsnodes 2.关闭 oracle clusterwa