CodeForces 173A Rock-Paper-Scissors 数学
2016-01-20 18:29
323 查看
Rock-Paper-Scissors
题目连接:
http://codeforces.com/problemset/problem/173/ADescription
Nikephoros and Polycarpus play rock-paper-scissors. The loser gets pinched (not too severely!).Let us remind you the rules of this game. Rock-paper-scissors is played by two players. In each round the players choose one of three items independently from each other. They show the items with their hands: a rock, scissors or paper. The winner is determined by the following rules: the rock beats the scissors, the scissors beat the paper and the paper beats the rock. If the players choose the same item, the round finishes with a draw.
Nikephoros and Polycarpus have played n rounds. In each round the winner gave the loser a friendly pinch and the loser ended up with a fresh and new red spot on his body. If the round finished in a draw, the players did nothing and just played on.
Nikephoros turned out to have worked out the following strategy: before the game began, he chose some sequence of items A = (a1, a2, ..., am), and then he cyclically showed the items from this sequence, starting from the first one. Cyclically means that Nikephoros shows signs in the following order: a1, a2, ..., am, a1, a2, ..., am, a1, ... and so on. Polycarpus had a similar strategy, only he had his own sequence of items B = (b1, b2, ..., bk).
Determine the number of red spots on both players after they've played n rounds of the game. You can consider that when the game began, the boys had no red spots on them.
Input
The first line contains integer n (1 ≤ n ≤ 2·109) — the number of the game's rounds.The second line contains sequence A as a string of m characters and the third line contains sequence B as a string of k characters (1 ≤ m, k ≤ 1000). The given lines only contain characters "R", "S" and "P". Character "R" stands for the rock, character "S" represents the scissors and "P" represents the paper.
Output
Print two space-separated integers: the numbers of red spots Nikephoros and Polycarpus have.Sample Input
7RPS
RSPP
Sample Output
3 2Hint
题意
两个人在玩石头剪刀布给你一个字符串表示第一个人的顺序
给你第二个字符串表示第二个人石头剪刀布的顺序
然后玩n局之后,问你两个人各输多少局
题解:
就求一个lcm之后,然后我们暴力这个lcm里面各输多少局,然后再暴力算余数里面各数多少局。就好了
这样复杂度可以降为O(lcm)的
代码
#include<bits/stdc++.h> using namespace std; string s1; string s2; int gcd(int a,int b) { if(b==0)return a; return gcd(b,a%b); } int lcm(int a,int b) { return a*b/gcd(a,b); } int solve(char a,char b) { if(a=='R'&&b=='P') return 1; if(a=='P'&&b=='S') return 1; if(a=='S'&&b=='R') return 1; return 0; } int main() { int n; scanf("%d",&n); cin>>s1>>s2; int c = lcm(s1.size(),s2.size()); int ans1=0,ans2=0; int len1 = s1.size(),len2 = s2.size(); for(int i=0;i<c;i++) { ans1+=solve(s1[i%len1],s2[i%len2]); ans2+=solve(s2[i%len2],s1[i%len1]); } ans1*=n/c; ans2*=n/c; int p = n-n/c*c; for(int i=0;i<p;i++) { ans1+=solve(s1[i%len1],s2[i%len2]); ans2+=solve(s2[i%len2],s1[i%len1]); } cout<<ans1<<" "<<ans2<<endl; }
相关文章推荐
- Python copy对象(copy与deepcopy)
- js将map转换成数组
- 移动端页面的尺寸设置
- 【南理oj】5 - Binary String Matching(水)
- iOS 自动化打包测试(使用jenkins、Tomcat、JDK实现)
- NSString什么时候用copy,什么时候用strong
- 使用JS构建简单Map(转)
- 学习 Jsp 的一点记录
- error: ‘for’ loop initial declarations are only allowed in C99 mode
- 自然语言处理中的Attention Model:是什么及为什么
- iOS实时卡顿监控
- android :使用swipment(侧滑)时,listview 内容重叠。
- Linux环境 Mysql新建用户和数据库并授权
- Android 开发中踩过的坑之八:多进程问题
- Java 基础——类和对象
- ES6+ 现在就用系列(一):为什么使用ES6+
- Tomcat7.0.54 进行日志分割
- 【IT人生】个人大学的坎坷路
- 2015-2016总结与展望
- SVG操作