比赛 2024暑假C班集训C 评测结果 WWWWWWWWWW
题目名称 W&B 最终得分 0
用户昵称 wdsjl 运行时间 4.059 s
代码语言 C++ 内存使用 4.35 MiB
提交时间 2024-07-12 10:37:48
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 100010;

long long sb,sw,c[N],ans,n,x,y,t,l_v,n_v,cnt,l_i,tot,bei,b_b,b_w,n_b,n_w;

char ch1,ch2,chrr[N];

int gcd(long long a,long long b){
    return b?gcd(b,a%b):a;
} 

int main(){
    freopen("silly.in","r",stdin);
    freopen("silly.out","w",stdout);
    scanf("%lld",&t);
    while(t--){
        ans=0;
        memset(c,0,sizeof(c));
        sb=0;
        sw=0;
        l_i=0;
        scanf("%lld",&n);
        for(int i=1;i<=n;i++){
            cin>>x>>ch1;
            if(ch1=='B')sb+=x;
            else sw+=x;
            if(ch1==ch2){
            }else{
                l_i++;
            }
            c[l_i]+=x;
            chrr[l_i]=ch1;
            ch2=ch1;
        }
        if(sb==0||sw==0){
            printf("%lld",sb+sw);
            return 0;
        }
        tot=sb+sw;
        bei=gcd(sb,sw);
        b_b=sb/bei;
        b_w=sw/bei;
        for(int i=1;i<=l_i;i++){
            if(chrr[i]=='B')n_b+=c[i];
            else n_w+=c[i];
            n_v=(chrr[i]=='B')?1:2;
            if(n_b&&n_w){
            if(n_b/gcd(n_b,n_w)==b_b&&n_w/gcd(n_b,n_w)==b_w){
                ans++;
                n_b=0;
                n_w=0;
            }else if(n_v==1){
                if(n_b>((n_w/b_w)*b_b)&&(n_w%b_w)==0){
                    n_b-=((n_w/b_w)*b_b);
                    n_w=0;
                    ans++;
                }
            }else if(n_v==2){
                if(n_w>((n_b/b_b)*b_w)&&(n_b%b_b)==0){
                    n_w-=((n_b/b_b)*b_w);
                    n_b=0;
                    ans++;
                }
            }
            }
        }
    printf("%d\n",ans);
    }
    return 0;
}