newcoder F石头剪刀布(DFS + 思维)题解
题意:
wzms 今年举办了一场剪刀石头布大赛,bleaves 被选为负责人。
比赛共有 2n 个人参加, 分为 n 轮,
在每轮中,第 1 位选手和第 2 位选手对战,胜者作为新的第 1 位选手,
第 3 位和第 4 位对战,胜者作为新的第 2 位选手,以此类推。
bleaves 调查得知,每个人都有其偏爱决策,每个人在每一次对战中都会使用他的偏爱决策。
如果一次对战的双方的偏爱决策相同,那么这次对战就永远不会结束,所以 bleaves 不希望这种情况发生。
现在 bleaves 知道了每个人的偏爱决策,但她不知道如何安排初始的次序,使得上面的情况不会发生,你能帮帮她吗?
全部的输入数据满足:R+P+S=2n ,1≤n≤20
链接:https://ac.nowcoder.com/acm/contest/332/F
来源:牛客网
思路:正向思考好像有点难度,那么就反向思考。只要确定了最终胜出的人,那么前面的都能推出来了,那么就从最后往前递归,然后从末尾往前按字典序排序递归回来。
代码:
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = ( << ) + ;
const int MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
int R, P, S, cnt;
int r, p, s;
char ans[maxn];
void dfs(char x, int L, int R){
if(L == R){
ans[L] = x;
if(x == 'R') r++;
else if(x == 'P') p++;
else if(x == 'S') s++;
return;
}
int m = (L + R) >> ;
if(x == 'R'){
dfs('R', L, m);
dfs('S', m + , R);
}
else if(x == 'P'){
dfs('P', L, m);
dfs('R', m + , R);
}
else if(x == 'S'){
dfs('S', L, m);
dfs('P', m + , R);
}
bool swapp = false;
for(int i = L; i <= m; i++){
if(ans[i] < ans[m + i - L + ]) break;
if(ans[i] > ans[m + i - L + ]){
swapp = true;
break;
}
}
if(swapp){
for(int i = L; i <= m; i++){
swap(ans[i], ans[m + i - L + ]);
}
}
}
int main(){
scanf("%d%d%d", &R, &P, &S); //r p s
cnt = R + P + S;
bool flag = false;
for(int i = ; i < ; i++){
r = p = s = ;
if(i == ){
dfs('R', , cnt);
}
else if(i == ){
dfs('P', , cnt);
}
else if(i == ){
dfs('S', , cnt);
}
if(R == r && P == p && S == s){
flag = true;
break;
}
}
ans[cnt + ] = '\0';
if(flag) printf("%s\n", ans + );
else printf("IMPOSSIBLE\n");
return ;
}
newcoder F石头剪刀布(DFS + 思维)题解的更多相关文章
- D. Eternal Victory(dfs + 思维)
D. Eternal Victory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- hiboCoder 1041 国庆出游 dfs+思维
先抽象出一棵以1做为根结点的树.给定了访问序列a[1..m]. 考虑两种特殊情况: 1.访问了某个a[j],但是存在a[i]没有访问且i < j,出现这种情况说明a[j]一定是a[i]的祖先节点 ...
- hdu6035[dfs+思维] 2017多校1
/*hdu6035[dfs+思维] 2017多校1*/ //合并色块, 妙啊妙啊 #include<bits/stdc++.h> using namespace std; ; const ...
- Gym 101128A Promotions(思维 + dfs)题解
题意:给一有向图,如果A指向B,则A是B的上级.一直i要升职那么他的上级必须都升职.现在给你一个升职人数的区间[a, b],问你升职a人时几个人必被升职,b时几个人必升职,b时几个人没有可能被升职. ...
- HDU 6060 RXD and dividing(dfs 思维)
RXD and dividing Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- CodeForces - 963B Destruction of a Tree (dfs+思维题)
B. Destruction of a Tree time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Atcoder F - Mirrored(思维+搜索)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...
- codeforces 799 D. Field expansion(dfs+思维剪枝)
题目链接:http://codeforces.com/contest/799/problem/D 题意:给出h*w的矩阵,要求经过操作使得h*w的矩阵能够放下a*b的矩阵,操作为:将长或者宽*z[i] ...
- hdu 6867 Tree 2020 Multi-University Training Contest 9 dfs+思维
题意: 给你一个由n个点,n-1条有向边构成的一颗树,1为根节点 下面会输入n-1个数,第i个数表示第i+1点的父节点.你可以去添加一条边(你添加的边也是有向边),然后找出来(x,y)这样的成对节点. ...
随机推荐
- 六 js函数和this
js的所有代码都是由funtion组成,funtion即函数的类型. 一.函数有两种写法 -----1.定义式 function test() { //定义一个函数 console.log(" ...
- QT5 QT4--LNK2019 无法解析的外部符号
新创建的工程 #include <QtWidgets/QApplication> #include <QtWidgets/QWidget> #include <QtWid ...
- ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)
概念介绍还是先简单说说Json的一些例子吧.注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计如果有争议,欢迎提出来探讨!1.最简单:{"total":0} t ...
- html5-表单的综合实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- sitecore系列教程之Sitecore个性化定制体验的内容策略
这是利用Sitecore个性化引擎实现数字化转型的三部分系列文章的第一部分. 想象一下这种情况:您是一家B2C公司,拥有源源不断的客户群,支持您的直接面向消费者的产品.您最近推出了一项新服务,旨在为不 ...
- 【Hive学习之三】Hive 函数
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- mac下编译cpu only caffe并用xCode建caffe工程
mac编译caffe 好像又变容易了,直接git clone下载blvc源码,make.config里去掉了CPU_ONLY前面的注释,并没有安装任何依赖,也可能是自己mac上本来有, xCode里调 ...
- 2017-2018-2 20165215 实验四《Android开发基础》实验报告
2017-2018-2 20165215 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:张家佳 学号:20165215 指导教 ...
- C# 设置按钮快捷键
参考自:http://www.csharpwin.com/csharpspace/3932r8132.shtml 一.C# button快捷键之第一种:Alt + *(按钮快捷键) 在Button按钮 ...
- Linux下MySQL远程链接配置
配置步骤: 1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 gr ...