题意

Sonny出石头剪刀布的猜拳策略是 先出R,然后每连续两段都是打败前一段的出拳, 现在问你第n回合打败他要出什么。

分析

他的策略 R P S PSR  SRP PSRSRPRPS SRPRPSPSR … …
打败他的策略是 P S R SRP  RPS SRPRPSPSR RPRPSRSRP … …
一套策略 1 1 1  3 3 9 9  … …
第几轮 1 2 3 4-6  7-9  10-18 19-27 … …

如果n是介于3的某个次方的(1,2]倍,那就是n要打败 n减去这个次方 对应的拳,故+1(对应的是P就变成S,S就变成R,R就变成P)

如果是(2,3]倍,那就+2(P变成R,R变成S,S变成P)。

而我们要知道 n减去这个次方 对应的拳,就用递归去求了。

可以用数组储存3的次方,数据范围n<=10^12,log310^12=25.15...,所以只要求到3的25次方即可。

代码

#include<stdio.h>
long long n,t[]={};
char s[]="RPS";
int main(){
for(int i=;i<=;i++)
t[i]=t[i-]*;
while(scanf("%I64d",&n)&&n){
int i=,a=;
while(n>){
while(n<=t[i])i--;
while(n>t[i]){
n-=t[i];
a++;//推的次数
}
}
printf("%c\n",s[(n+a)%]);
//n为1 2 3,对应PSR
//a为推的次数
//(n+a)mod 3为对应的拳
// 0对应R,1对应P,2对应S
}
return ;
}

也可以用数学函数,我刚开始就是这样做,但是因为没有round,有误差,就WA了

#include <stdio.h>
#include <cmath>
#define ll long long
ll n,t,a;
char s[]="RPS";
int main()
{
while(~scanf("%I64d",&n)&&n)
{
a=;
t=(ll)round(pow(,floor(log(n)/log())));
//t为小于等于n的最大的3的次方,用round四舍五入取整防止误差
if(n==t)t/=;
//我们要求的是小于n的最大的3的次方,故t等于n时,t取再小一点的3的次方
while(n>t&&t>)
{
n-=t;
t=(ll)round(pow(,floor(log(n)/log())));
if(n==t)t/=;
a++;
}
printf("%c",s[(n+a)%]);
}
return ;
}

【Gym 100015A】Another Rock-Paper-Scissors Problem的更多相关文章

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

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

  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. 【codeforces 527A】Playing with Paper

    [题目链接]:http://codeforces.com/contest/527/problem/A [题意] 让你每次从一个长方形里面截出一个边长为长方形的较短边的正方形; 然后留下的部分重复上述步 ...

  4. 【线段树】HDU 5443 The Water Problem

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 题目大意: T组数据.n个值,m个询问,求区间l到r里的最大值.(n,m<=1000) ...

  5. 【期望DP】BZOJ2318-[Spoj4060]Game with probability Problem

    [题目大意] Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币 ...

  6. 【codeforces 761D】Dasha and Very Difficult Problem

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

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

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

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

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

  9. 【 Gym 101116K 】Mixing Bowls(dfs)

    BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...

随机推荐

  1. AC日记—— codevs 1031 质数环(搜索)

    题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上 ...

  2. Lambda 表达式(C# 编程指南)

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.Lambda 表达式对于编写 LINQ 查 ...

  3. 在同一个机器中安装LoadRunner与QTP

    若你计划在测试机上安装LoadRunner并且测试机上已经安装了QTP,类似这样的情况可能会出现一些冲突现象,若QTP与LR必须并存在同一测试机上,那么请确保先安装Loadrunner以及所有的LR补 ...

  4. S2小测--索引--视图

    1.  关于Sql server 视图 视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询.视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目 标.理论上它可以像普通的物理表一 ...

  5. 014医疗项目-模块一:删除用户的功能l

    删除用户的功能我们还是按照:Dao->Service->Action->页面调试这种顺序来写. Dao: 我们使用逆向工程生成的方法就好: SysuserMapper sysuser ...

  6. mousewheel 模拟滚动

    div{ box-sizing:border-box; } .father{ width:500px; height:400px; margin:auto; margin-top: 50px; bor ...

  7. 抓包排错-tcp.flags.reset

      一 排查思路: 1,了解协议运作过程 2,抓包 最小化原则 对比法 二 案例 微信连wifi问题: 不同地区的微信服务器的地址可能不同. 当出现认证问题: 1,不能跳转,点了按钮没反应 2,打开后 ...

  8. css3 线性渐变和径向渐变

    线性渐变:ie6以下不兼容 径向渐变:只支持firefox.Chrome和Safari <!DOCTYPE html> <html> <head> <meta ...

  9. 微信公众平台开发之微信access_token如何有效长期保存

    随着微信使用越来越广泛,微信公众平台开放了许多接口以提供更多个性化的服务,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相同的参数ac ...

  10. 基于.Net FrameWork的 RestFul Service

    关于本文 这篇文章的目的就是向大家阐述如何在.net framework 4.0中创建RestFul Service并且使用它. 什么是web Services,什么是WCF 首先讲到的是web Se ...