生活随笔
收集整理的這篇文章主要介紹了
rock-paper-scissors
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
rock-paper-scissors
維護(hù)三個前綴和,然后注意順序,最后做差來確定可行的答案,因?yàn)榇鸢副容^小,可以考慮這種暴力做法,像這種方案數(shù)可以++的題真的不多,如果想不出來特別優(yōu)秀的想法,不妨簡單化思維
1 #include<iostream>
2 #include<cstdio>
3 #include<queue>
4 #include<algorithm>
5 #include<cmath>
6 #include<ctime>
7 #include<
set>
8 #include<map>
9 #include<stack>
10 #include<cstring>
11 #define inf 2147483647
12 #define ls rt<<1
13 #define rs rt<<1|1
14 #define lson ls,nl,mid,l,r
15 #define rson rs,mid+1,nr,l,r
16 #define N 100010
17 #define For(i,a,b) for(int i=a;i<=b;i++)
18 #define p(a) putchar(a)
19 #define g() getchar()
20
21 using namespace std;
22 int R[
1010],S[
1010],P[
1010];
23 int n,m;
24 int T;
25 char a[
1010];
26 int cnt;
27 void in(
int &
x){
28 int y=
1;
29 char c=g();x=
0;
30 while(c<
'0'||c>
'9'){
31 if(c==
'-')y=-
1;
32 c=
g();
33 }
34 while(c<=
'9'&&c>=
'0'){
35 x=(x<<
1)+(x<<
3)+c-
'0';c=
g();
36 }
37 x*=
y;
38 }
39 void o(
int x){
40 if(x<
0){
41 p(
'-');
42 x=-
x;
43 }
44 if(x>
9)o(x/
10);
45 p(x%
10+
'0');
46 }
47 int main(){
48 in(T);
49 while(T--
){
50 cnt=
0;
51 in(n);
52 cin>>(a+
1);
53 For(i,
1,n){
54 if(a[i]==
'R'){
55 R[i]=R[i-
1];
56 S[i]=S[i-
1]-
1;
57 P[i]=P[i-
1]+
1;
58 }
59 if(a[i]==
'S'){
60 R[i]=R[i-
1]+
1;
61 S[i]=S[i-
1];
62 P[i]=P[i-
1]-
1;
63 }
64 if(a[i]==
'P'){
65 R[i]=R[i-
1]-
1;
66 S[i]=S[i-
1]+
1;
67 P[i]=P[i-
1];
68 }
69 }
70 For(i,
0,n)
71 For(j,
0,n)
72 if(i+j<=n&&R[i]+P[i+j]-P[i]+S[n]-S[j+i]>
0)
73 cnt++
;
74 o(cnt);p(
'\n');
75 }
76 return 0;
77 }
View Code ?
轉(zhuǎn)載于:https://www.cnblogs.com/war1111/p/10387178.html
總結(jié)
以上是生活随笔為你收集整理的rock-paper-scissors的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。