【Gym 100015A】Another Rock-Paper-Scissors Problem
题意
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的更多相关文章
- 【题解】CF1426E Rock, Paper, Scissors
题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- 【codeforces 527A】Playing with Paper
[题目链接]:http://codeforces.com/contest/527/problem/A [题意] 让你每次从一个长方形里面截出一个边长为长方形的较短边的正方形; 然后留下的部分重复上述步 ...
- 【线段树】HDU 5443 The Water Problem
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 题目大意: T组数据.n个值,m个询问,求区间l到r里的最大值.(n,m<=1000) ...
- 【期望DP】BZOJ2318-[Spoj4060]Game with probability Problem
[题目大意] Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币 ...
- 【codeforces 761D】Dasha and Very Difficult Problem
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数
Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...
- FFT(Rock Paper Scissors Gym - 101667H)
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
- 【 Gym 101116K 】Mixing Bowls(dfs)
BUPT2017 wintertraining(15) #4H Gym - 101116K 题意 给定一个菜谱,大写的单词代表混合物,小写的代表基础原料.每个混合物由其它混合物或基础原料组成,不会间接 ...
随机推荐
- nginx 与 tomcat 集群 一二事 (0) - 简单介绍
最近看了nginx以及tomcat的集群,通俗的做一下简单总结吧 nginx 是一个http服务器,是由俄罗斯人发明的,目前主流的服务器,作为负载均衡服务器,性能非常好,最高支持5万个并发连接数,在淘 ...
- IL查看override
查看override的IL Override示例 下面我们看一个Override的Example namespace MyCollection { public class MyBase { publ ...
- AutoIT删除Internet临时文件
搜集了几个超赞的方法: 1.删除临时文件 Temporary Internet Files:RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 2. 删 ...
- 移动App崩溃测试用例设计
我们的日常生活中对移动设备越来越多的使用意味着移动App测试这个主题已成为需要考虑的一个无法避免的问题.根据最近的调查研究,用户难以容忍有bug的移动App. 移动App Bug的影响是用户体验差.A ...
- KVM虚拟机CPU说明
废话不多说了,下面对kvm虚拟机的CPU说明做一梳理:NUMA技术介绍NUMA是一种解决多CPU共同工作的技术方案,我们先回顾下多CPU共同工作的技术架构历史.多CPU共同工作主要有三种架构,分别是S ...
- 图解HTTP看书体会(1)
MAC地址和IP地址的区别与联系 一.IP地址 对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址.IP地址由用点分隔开的4个8八位组构成,如192.168.0.1就是一个 ...
- Myeclipse+maven时Tomcat部署时maven的依赖文件不能部署到Tomcat上
解决办法:
- WPF登陆窗口、主窗口切换问题
代码 MainWindow mwin = new MainWindow(); Application.Current.MainWindow = mwin; this.Close(); mwin.Sho ...
- 如何利用ThoughtWorks.QRCode 生成二维码
1.引用ThoughtWorks.QRCode.dll 在nuget上查找即可引用,也可自行下载 2.生成二维码静态方法 参数: 二维码内容:fileUrl 二维码图片名:typeName #regi ...
- char 转wchar_t 及wchar_t转char
利用WideCharToMultiByte函数来转换,该函数映射一个unicode字符串到一个多字节字符串.通常适合于window平台上使用. #include <tchar.h> #in ...