Codeforces Round #388 (Div. 2) C. Voting
题意:有n个人,每个人要么是属于D派要么就是R派的。从编号1开始按顺序,每个人都有一次机会可以剔除其他任何一个人(被剔除的人就不在序列中也就失去了剔除其他人的机会了);当轮完一遍后就再次从头从仅存的人中从编号最小开始重复执行上述操作,直至仅存在一派,问最后获胜的是哪一派? 并且,题目假设每个人的选择是最优的,即每个人的操作都是会尽可能的让自己所属的派获胜的。
题解: 一开始看到说每个人的操作都会是最优的还以为是个博弈(=_=),,,仔细琢磨了下样例发现并不用,只要贪心模拟就行了。贪心的策略并不难:对于第i个人,他所要做的是剔除掉里位置i最近的反派的人;因为剔除掉离自己最近的一位反派的话,就可以尽可能使后面自己派的人中多存活一个;如果去剔除其他位置的人的话,都没有比这么操作的更优。那如果从i后续的位置都没有反派的时候,那就剔除位置i前面的编号最小的反派;一开始的时候只是直觉要这么贪心...过了之后才知道怎么证明的:前面说了每个人剔除从自己后面中相离最近的反派,如果位置i~n中没有反派存在,但因为轮完一轮之后又会从头开始轮一遍,所以我们就把这种循环化为线性来处理,即在i~n位置中没有反派就继续往后n+1、n+2....n+i-1(即1、2....i-1)中遍历直至找到最近的一个反派。 模拟的时候,将其作为线性处理就很解决了: 创建两个队列按编号顺序分别存两派的人的编号。每次操作将两队列中头元素较小的那个元素取出放到队尾,然后将另一队列的头元素弹出(即编号较小的人小操作,剔除反派中编号最小的一个人),放到对尾的元素编号要再加上n(即将其置为下论仍有操作的人)。 不断重复直至一个队列为空。
/**
* @author Wixson
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <map>
#include <set>
const int inf=0x3f3f3f3f;
const double PI=acos(-1.0);
const double EPS=1e-;
using namespace std;
typedef long long ll;
typedef pair<int,int> P; int n;
char str[];
int main()
{
//freopen("input.txt","r",stdin);
scanf("%d",&n);
scanf("%s",str);
//
char ans;
queue<int> qd,qr;
//
for(int i=;i<n;i++)
{
if(str[i]=='D') qd.push(i);
else qr.push(i);
}
//
while(true)
{
if(qd.empty())
{
ans='R';
break;
}
else if(qr.empty())
{
ans='D';
break;
}
//
if(qd.front()<qr.front())
{
qr.pop();
qd.push(qd.front()+n);
qd.pop();
}
else
{
qd.pop();
qr.push(qr.front()+n);
qr.pop();
}
}
//
printf("%c\n",ans);
return ;
}
Codeforces Round #388 (Div. 2) C. Voting的更多相关文章
- Codeforces Round #388 (Div. 2)
# Name A Bachgold Problem standard input/output 1 s, 256 MB x6036 B Parallelogram is Back s ...
- Codeforces Round #388 (Div. 2) - C
题目链接:http://codeforces.com/contest/749/problem/C 题意:给定一个长度为n的D/R序列,代表每个人的派别,然后进行发表意见,顺序是从1到n.每个人到他的回 ...
- Codeforces Round #388 (Div. 2) - B
题目链接:http://codeforces.com/contest/749/problem/B 题意:给定平行四边形的3个点,输出所有可能的第四个点. 思路:枚举任意两个点形成的直线,然后利用这两个 ...
- Codeforces Round #388 (Div. 2) - A
题目链接:http://codeforces.com/contest/749/problem/A 题意:给定一个数n,求把n分解成尽量多的素数相加.输入素数个数和具体方案. 思路:因为要尽量多的素数, ...
- Codeforces Round #388 (Div. 2) A,B,C,D
A. Bachgold Problem time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #388 (Div. 2) A+B+C!
A. Bachgold Problem 任何一个数都可以由1和2组成,由于n是大于等于2的,也就是可以由2和3组成.要求最多的素数即素数越小越好,很明显2越多越好,如果n为奇数则再输出一个3即可. i ...
- Codeforces Round #388 (Div. 2) 749E(巧妙的概率dp思想)
题目大意 给定一个1到n的排列,然后随机选取一个区间,让这个区间内的数随机改变顺序,问这样的一次操作后,该排列的逆序数的期望是多少 首先,一个随机的长度为len的排列的逆序数是(len)*(len-1 ...
- Codeforces Round #388 (Div. 2) D
There are n people taking part in auction today. The rules of auction are classical. There were n bi ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- MySQL的安装和启动
一.MySQL各类安装方法的比较 在Linux系统下,MySQL有3种主要的安装方式,分别是:RPM安装.二进制安装.源码安装.三种安装方式的优缺点如下表所示: RPM安装 二进制安装 源码安装 ...
- [转]android使用全局变量的两种方法
本文转自:http://blog.csdn.net/feiyangxiaomi/article/details/9966215 在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对 ...
- Laravel (5.5.33) 加载过程---make方法(四)
/** * Resolve the given type from the container. * * @param string $abstract * @return mixed */ publ ...
- [转]STL之deque容器详解
Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...
- 转:java中static、final、static final的区别
http://blog.csdn.net/qq1623267754/article/details/36190715 final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性 ...
- html——特例
1.a标签与a标签之间有3px距离 2.标准流中的文字不会被浮动的盒子遮挡 <div style="width:150px;height:150px;background-color: ...
- php用户注册常用检测、写入
// 判断数据库是否已经存在 $check_sql = "select * from user where idNumber='$idNumber'"; $check_query ...
- PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unkno…
今天安装安装一个叫得推校园O2O系统的使劲都说连接不上服务器. 下面是安装说明,我直接进行3步骤,导入数据库配置文件,结果就显示题目报错的内容 安装说明: 直接输入程序目录即可 http://loca ...
- Git学习总结四(删除)
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: $ rm test.txt 这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻 ...
- 一个ROS的服务,使机器人向前移动指定距离
源代码有点长,放文末链接里了. 服务描述及代码现在的服务是:请求时携带要前进的距离,然后底盘前进相应距离.代码如下,改动很小: #!/usr/bin/env python import rospyfr ...