题意:
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 + 思维)题解的更多相关文章

  1. D. Eternal Victory(dfs + 思维)

    D. Eternal Victory time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. hiboCoder 1041 国庆出游 dfs+思维

    先抽象出一棵以1做为根结点的树.给定了访问序列a[1..m]. 考虑两种特殊情况: 1.访问了某个a[j],但是存在a[i]没有访问且i < j,出现这种情况说明a[j]一定是a[i]的祖先节点 ...

  3. hdu6035[dfs+思维] 2017多校1

    /*hdu6035[dfs+思维] 2017多校1*/ //合并色块, 妙啊妙啊 #include<bits/stdc++.h> using namespace std; ; const ...

  4. Gym 101128A Promotions(思维 + dfs)题解

    题意:给一有向图,如果A指向B,则A是B的上级.一直i要升职那么他的上级必须都升职.现在给你一个升职人数的区间[a, b],问你升职a人时几个人必被升职,b时几个人必升职,b时几个人没有可能被升职. ...

  5. HDU 6060 RXD and dividing(dfs 思维)

    RXD and dividing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  6. 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 ...

  7. Atcoder F - Mirrored(思维+搜索)

    题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...

  8. codeforces 799 D. Field expansion(dfs+思维剪枝)

    题目链接:http://codeforces.com/contest/799/problem/D 题意:给出h*w的矩阵,要求经过操作使得h*w的矩阵能够放下a*b的矩阵,操作为:将长或者宽*z[i] ...

  9. hdu 6867 Tree 2020 Multi-University Training Contest 9 dfs+思维

    题意: 给你一个由n个点,n-1条有向边构成的一颗树,1为根节点 下面会输入n-1个数,第i个数表示第i+1点的父节点.你可以去添加一条边(你添加的边也是有向边),然后找出来(x,y)这样的成对节点. ...

随机推荐

  1. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

    https://blog.csdn.net/zouxy09/article/details/9993371 自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一 ...

  2. hdu3037 lucas

    题意 :  给了n课不同的树,要求将 0,1,2,3,4,5,...m个松果,分别放在n棵树上的方案数有多少, 我们这样考虑, 如果将m个相同的松果 放入n棵树中 , 转化一下,我们让每个点至少放1个 ...

  3. hdu5067

    题意 给了一个n*m的网格 然后一台挖掘机从(0,0) 这个位置出发,收集完全部的石头回到(0,0)挖掘机可以有无限的载重 用旅行商处理 dp[k][i] 表示在这个集合中最后到达i的最小距离,用集合 ...

  4. quick player no exit

    QuickXDev插件自动升级后player no exist 昨晚上QuickXDev插件运行还ok,今天打开电脑启动sublime text2后,右键run with player提示player ...

  5. Django框架----命名空间模式

    命名空间模式 即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 举个例子: project中的urls.py from django.conf.urls im ...

  6. js 显示刚刚上传的图片 (onchange事件)

    <table> <tr width="100"> <td>上传商场图片:</td> <td> <input typ ...

  7. 登录实现之servlet和SpringMVC

    #知识小点: 防止乱码的字符集的设置: request.setCharacterEncoding():确定从请求端发送到给服务器的编码是汉字字符集.该方法对get方法 无效,只对post方法有效.若要 ...

  8. thinkphp 随笔

     'TMPL_CACHE_ON' => false,//禁止模板编译缓存 'HTML_CACHE_ON' => false,//禁止静态缓存 

  9. K8S学习笔记之Kubernetes核心概念

    0x00  Kubernetes简介 Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践. K8S在Doc ...

  10. mysql判断两个时间段是否有交集

    //判断两个时间段是否有交集 private function checkTimeCross($start_time,$end_time){ $sql ) AND ((start_time > ...