ACM: 限时训练题解-Rock-Paper-Scissors-前缀和
- Rock-Paper-Scissors
 
Rock-Paper-Scissors is a two-player game, where each player chooses one of Rock, Paper, or Scissors. Here are the three cases in which a player gets one point:
 Choosing Rock wins over a player choosing scissors.
 Choosing Scissors wins over a player choosing Paper.
 Choosing Paper wins over a player choosing Rock.
In all other cases, the player doesn’t get any points.
Bahosain and his friend Bayashout played N rounds of this game. Unlike Bayashout, Bahosain was too lazy to decide what to play next for each round, so before starting to play, he chose three integers X Y Z such that X+Y+Z = N and X, Y, Z ≥ 0, and then played Rock for the first X rounds, Paper for the next Y rounds, and Scissors for the last Z rounds.
Bayashout got more points in the N rounds and won. Given the moves played by Bayashout in each round, Bahosain wants to know the number of ways in which he could have chosen X, Y and Z such that he wins in the N rounds.
The winner of the N rounds is the player that gets more total points in the N rounds.
Input
The first line of input contains T (1 ≤ T ≤ 64), where T is the number of test cases.
The first line of each test case contains an integer N (1 ≤ N ≤ 1000) that represents the number of rounds.
The next line contains a string of N uppercase letters, the first letter represents the choice of Bayashout for the first round, the second letter represents his choice for the second round, and so on.
Each letter in the string is one of the following: R (Rock), P (Paper), or S (Scissors).
Output
For each test case, print a single line with the number of ways in which Bahosain could have won.
| 
 Sample Input  | 
 Sample Output  | 
| 
 4  | 
 3  | 
| 
 3  | 
 1  | 
| 
 RPS  | 
 1  | 
| 
 1  | 
 5  | 
| 
 R  | 
|
| 
 5  | 
|
| 
 PPRSR  | 
|
| 
 5  | 
|
| 
 RPSPR  | 
/*
题意;A B猜拳,猜N次
但是A很懒,不想去想怎么猜拳就随机的连续出x次石头 y次布 z次剪刀
现在给出B的猜拳的出拳的顺序,
然后A以石头R 布P 剪刀S 的顺序出,在出了布之后就不在出石头,出了剪刀后就不再出石头和布
问A有多少种可能赢B。 这题一开始不怎么会做,做到限时赛最后还有30分钟的时候又回过头来看这个题目
不就是一个简单的前缀和么,一开始都没想到。 AC代码:
*/
#include"iostream"
#include"algorithm"
#include"cstdio"
#include"cstring"
#include"cmath"
#define MX 1000 + 50
using namespace std;
int r[MX],p[MX],s[MX],len;
char str[MX]; int main() {
int T;
scanf("%d",&T);
while(T--) {
memset(r,0,sizeof(r));
memset(p,0,sizeof(p));
memset(s,0,sizeof(s));
memset(str,0,sizeof(str));
scanf("%d%s",&len,str+1);
for(int i=1; i<=len; i++) {
if(str[i]=='R') { //这里用数组rps记录全部出石头布剪刀的得分 【dp-前缀和】
p[i]=p[i-1]+1; //如果B出的石头 则A的布得分 +1
r[i]=r[i-1]; //A的石头平局,不变
s[i]=s[i-1]-1; //A的剪刀输扣分 -1
} //下面一样
if(str[i]=='S') {
r[i]=r[i-1]+1;
s[i]=s[i-1];
p[i]=p[i-1]-1;
}
if(str[i]=='P') {
s[i]=s[i-1]+1;
p[i]=p[i-1];
r[i]=r[i-1]-1;
}
}
int ans=0;
for(int i=0; i<=len; i++) { //i-1 为连续出石头的次数 r[i]-r[0]为A出石头的得分
for(int j=i; j<=len; j++) { //j-i为连续出布的次数 p[j]-p[i]为A出布的得分
if(r[i]-r[0]+p[j]-p[i]+s[len]-s[j]>0) { //len-j 为连续出布的次数 s[len]-p[j]为A出剪刀的得分
ans++; //计算和 如果比0大就算赢。
}
}
}
printf("%d\n",ans);
}
return 0;
}
ACM: 限时训练题解-Rock-Paper-Scissors-前缀和的更多相关文章
- ACM:  限时训练题解-Runtime Error-二分查找
		
Runtime Error Bahosain was trying to solve this simple problem, but he got a Runtime Error on one ...
 - ACM:  限时训练题解-Heavy Coins-枚举子集-暴力枚举
		
Heavy Coins Bahosain has a lot of coins in his pocket. These coins are really heavy, so he always ...
 - ACM:  限时训练题解- Travelling Salesman-最小生成树
		
Travelling Salesman After leaving Yemen, Bahosain now works as a salesman in Jordan. He spends mos ...
 - ACM: 限时训练题解-Epic Professor-水题
		
Epic Professor Dr. Bahosain works as a professor of Computer Science at HU (Hadramout Universit ...
 - ACM: 限时训练题解-Street Lamps-贪心-字符串【超水】
		
Street Lamps Bahosain is walking in a street of N blocks. Each block is either empty or has one la ...
 - 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
		
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
 - 【题解】CF1426E Rock, Paper, Scissors
		
题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...
 - 题解 CF1426E - Rock, Paper, Scissors
		
一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...
 - SDUT 3568 Rock Paper Scissors 状压统计
		
就是改成把一个字符串改成三进制状压,然后分成前5位,后5位统计, 然后直接统计 f[i][j][k]代表,后5局状压为k的,前5局比和j状态比输了5局的有多少个人 复杂度是O(T*30000*25*m ...
 
随机推荐
- 自动复制转换StringBuffer
			
自动复制转换StringBuffer http://www.cnblogs.com/coqn/archive/2012/07/31/all_StringBuufer.html http://blog. ...
 - gbdt可视化
			
gbdt的最大优点,和决策树一样,高度可解释,最喜欢的分类模型:) #!/usr/bin/env python #coding=gbk # ============================== ...
 - c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)
			
转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distin ...
 - CSS中设置DIV垂直居中的N种方法 兼容IE浏览器
			
在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...
 - oracle sql rank dense_rank row_number fisrt last
			
測試表emp
 - JavaScript - call(this)
			
为什么使用call(this), 而不是直接使用(function(){})(); "use strict" function Foo() { (function() { cons ...
 - wp8 入门到精通 Utilities类 本地存储+异步
			
public class CCSetting { public async static void AddOrUpdateValue<T>(string key, T value) { t ...
 - Uncaught ReferenceError: console is not defined
			
今天写javascript代码遇到了这个极其神奇的问题,居然报错说内置的console不存在,而且后来我换成了alert也不行.照例说这些都是js代码内置的东西不应该出现这种错误.不过百度之发现貌似没 ...
 - hdu 4063 福州赛区网络赛 圆 ****
			
画几个图后,知道路径点集一定是起点终点加上圆与圆之间的交点,枚举每两个点之间是否能走,能走则连上线,然后求一遍最短路即可 #include<cstdio> #include<cstd ...
 - [Qcon] 百姓网开发总结
			
拿到的PPT看了之后,发现给出的很简洁,但每个步骤用处却非常有用,我们一个个来分析: 1. 集中开发环境,这些方法看似简单,但是都是很实用的方法,在我开发中看的出来,SVN无分支就能解决我现有部门的部 ...