Another Rock-Paper-Scissors Problem

题目连接:

http://codeforces.com/gym/100015/attachments

Description

Sonny uses a very peculiar pattern when it comes to playing rock-paper-scissors. He likes to vary his moves

so that his opponent can’t beat him with his own strategy.

Sonny will play rock (R) on his first game, followed by paper (P) and scissors (S) for his second and

third games, respectively. But what if someone else is using the same strategy? To thwart those opponents,

he’ll then play paper to beat rock, scissors to beat paper, and rock to beat scissors, in that order, for his 4th

through 6th games. After that, he’ll play scissors, rock, and paper for games 7–9 to beat anyone copying

his last set of moves. Now we’re back to the original order—rock, paper, scissors—but instead of being

predictable and using the same moves, do you know what would be better? You guessed it! Sonny then

plays the sequence of moves that would beat anyone trying to copy his whole strategy from his first move,

and on it goes...

To recap, in symbolic form, Sonny’s rock-paper-scissors moves look like this:

RPSPSRSRPPSRSRPRPSSRPRPSPSRPSRSRPRPSSRPRPSPSRRPSPSRSRP ...

The spaces are present only to help show Sonny’s playing pattern and do not alter what move he’ll play on

a certain game.

Naturally, your job is to beat Sonny at his own game! If you know the number of the game that you’ll

be playing against Sonny, can you figure out what move you would need to play in order to beat him?

Input

Each line of the input contains a single integer N,1 ! N ! 1012, the number of the game you’ll be playing

against Sonny. An integer N = 1 indicates it would be Sonny’s first game, N = 7 indicates it would be the

7th game, and so forth. The input terminates with a line with N = 0. For example:

1

7

33

0

Warning: N may be large enough to overflow a 32-bit integer, so be sure to use a larger data type (i.e.

long in Java or long long in C/C++) in your program.

Output

For each test case, output a single line which contains the letter corresponding to the move you would need

to play to beat Sonny on that game. For example, the correct output for the sample input above would be:

P

R

S

Sample Input

1

7

33

0

Sample Output

P

R

S

Hint

题意

剪刀石头布

初始串,RPS

每次操作如下:设现在的串为S

1、将之前的串全部击败,得到S'

2、将S'打败,然后得到S''

然后给你第i位,然后输出打败第i位的策略

题解:

找找规律之后会发现,这个串类似于3进制一样的

比如说23,他是23->14->5->2这样过来的

然后我们只用算他是从哪儿过来的,迭代了几次就好了

代码

#include<bits/stdc++.h>
using namespace std; const long long limit = 1000000000050LL;
vector<long long> three;
string solve(long long n,long long step)
{
if(n==1)
{
if(step%3==0)
return "P";
else if(step%3==1)
return "S";
else
return "R";
}
if(n==2)
{
if(step%3==0)
return "S";
else if(step%3==1)
return "R";
else
return "P";
}
if(n==3)
{
if(step%3==0)
return "R";
else if(step%3==1)
return "P";
else return "S";
}
}
int main()
{
long long k = 3;
for(int i=0;;i++)
{
three.push_back(k);
k*=3;
if(k>limit)
break;
}
long long n;
while(cin>>n)
{
if(n==0)break;
int step = 0;
while(n>3)
{
n-=*--lower_bound(three.begin(),three.end(),n);
step++;
}
cout<<solve(n,step)<<endl;
}
}

Codeforces Gym 100015A Another Rock-Paper-Scissors Problem 找规律的更多相关文章

  1. Gym 101194A / UVALive 7897 - Number Theory Problem - [找规律水题][2016 EC-Final Problem A]

    题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...

  2. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  3. Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数

    Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...

  4. Codeforces D. Little Elephant and Interval(思维找规律数位dp)

    题目描述: Little Elephant and Interval time limit per test 2 seconds memory limit per test 256 megabytes ...

  5. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...

  6. SDUT 3568 Rock Paper Scissors 状压统计

    就是改成把一个字符串改成三进制状压,然后分成前5位,后5位统计, 然后直接统计 f[i][j][k]代表,后5局状压为k的,前5局比和j状态比输了5局的有多少个人 复杂度是O(T*30000*25*m ...

  7. Gym101667 H. Rock Paper Scissors

    将第二个字符串改成能赢对方时对方的字符并倒序后,字符串匹配就是卷积的过程. 那么就枚举字符做三次卷积即可. #include <bits/stdc++.h> struct Complex ...

  8. 【题解】CF1426E Rock, Paper, Scissors

    题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...

  9. 题解 CF1426E - Rock, Paper, Scissors

    一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...

随机推荐

  1. jquery的一些技巧总结

    1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...

  2. css3.0新属性效果在ie下的解决方案(兼容性)

    css3.0增加的新属性,如投影.渐变.旋转.圆角等等!这些新标准属性在ie6.ie7.ie8浏览器版本里得不到很好的支持,相信ie以后的新版本也会支持这些新属性的.目前ie6.ie7.ie8浏览器不 ...

  3. 俄罗斯方块游戏 --- java

    俄罗斯方块游戏 如有疑问请查看:http://zh.wikipedia.org/zh-tw/%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97 更多疑问请参考: ...

  4. latex公式中的空格如何表示

    两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m的宽度 大空格 a\ b 1/3m宽度 中等空格 a\;b 2/7m宽度 小空格 a\,b 1/6m宽度 ...

  5. MyEclipse10导入工程jsp报错问题

    好多时候,再用myecplise进行项目开发的时候,遇到导入工程的时候,工程内的jsp页面好多都报错.这是什么原因造成的呢?​ 我对于我遇到的问题及解决方法,跟大家分享一下.​ 我的Jsp页面报错的原 ...

  6. codejam环境熟悉—Minimum Scalar Product

    今天准备熟悉一下codejam的在线编程,为google的笔试做准备,因此按照codejam上对新手的建议,先用了一个简单的题目来弄清楚流程.记录一下需要注意的地方.   1.输入输出 输入输出重定位 ...

  7. 轻松学Linux之使用转义字符

         转义字符是C语言中表示字符的一种特殊形式.通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号( '),在Unix操作系统中有一类特殊的字符 ...

  8. c++10 Seattle Clang error

    升级到C++Builder RAD 10 Settle 一些错误解决方法,使用LLVM  CLang编译器,BCC32C http://docwiki.embarcadero.com/RADStudi ...

  9. Scene View Navigation

    [Scene View Navigation] Hold the right mouse button to enter Flythrough mode. This turns your mouse ...

  10. C++的双冒号(域解析符)

    在C++中,“::”表示“作用域标识符”或者叫“作用域分解运算符”,比如:“类名::函数名”,这样是表示该函数是该类的成员函数, 但是象下面这种写法:“::函数名”,作用域标识符前面没有任何对象,代表 ...