Gym-100712B-Rock-Paper-Scissors

来源:互联网 发布:mac面对面快传 编辑:程序博客网 时间:2024/06/01 10:36

分别预处理前k(k=0,1,2,…,n)次均出剪刀、石头或布的得分。
然后枚举他们的边界判断得分是否大于0即可

#include<cstdio>  #include<cstring>    #include<iostream>  #include<algorithm>     using namespace std;  char s[1005];  int cnt[3][1005];  int main()  {      int T;      scanf("%d",&T);      while(T--)      {         memset(cnt,0,sizeof(cnt));        int n;          scanf("%d",&n);          scanf("%s",s);          for(int i=1;i<=n;i++)          {              cnt[0][i]=cnt[0][i-1]+(s[i-1]=='S')-(s[i-1]=='P');              cnt[1][i]=cnt[1][i-1]+(s[i-1]=='R')-(s[i-1]=='S');              cnt[2][i]=cnt[2][i-1]+(s[i-1]=='P')-(s[i-1]=='R');          }          int ans=0;          for(int i=0;i<=n;i++)          {              for(int j=i;j<=n;j++)              {                  if(cnt[0][i]+cnt[1][j]-cnt[1][i]+cnt[2][n]-cnt[2][j]>0)ans++;              }          }          printf("%d\n",ans);      }      return 0;  }  
0 0
原创粉丝点击