传送门:http://codeforces.com/gym/100015/attachments
已知一个石头剪刀布的串S
初始是P
每次构造串S‘打败S,以及S’‘打败S’
以此类推
求第n个元素是什么
只要找到是哪个转移来的就行
让x减去不大于x的最大的3的幂
代码如下:
#include<cstdio>
using namespace std;
long long n;
int change(int x)
{
return (x+1)%3;
}
long long next(long long x)
{
long long sum=1;
while (sum<x)
{
sum*=3;
}
sum/=3;
return x-sum;
}
int get(long long n)
{
if (n<=2)
{
return n;
}
else
{
return change(get(next(n)));
}
}
int main()
{
while (1)
{
scanf("%I64d",&n);
if (!n)
{
break;
}
switch (get(n))
{
case 0:
{
printf("R\n");
break;
}
case 1:
{
printf("P\n");
break;
}
case 2:
{
printf("S\n");
break;
}
}
}
return 0;
}