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

int T,n,res,q[100010][2];

int gcd(int a,int b){
    if (!a || !b) return -1;
    if (a<b) swap(a,b);
    int c=a%b;
    if (!c) return b;
    return gcd(b,c);
}

int main(){
    freopen("silly.in","r",stdin);
    freopen("silly.out","w",stdout);
    
    cin.tie(0);cout.tie(0);
    cin>>T;
    int k,bn,wn,b,w,res;
    char c;
    for (int x=1;x<=T;x++){
        cin>>n;
        bn=0,wn=0,b=0,w=0,res=0;
        int bp,wp;
        for (int i=1;i<=n;i++){
            cin>>k>>c;
            if (c=='B') bn+=k,q[i][0]=0;
            else wn+=k,q[i][0]=1;
            q[i][1]=k;
        }
        int g=gcd(bn,wn);
        if (g==-1){
            cout<<(bn+wn)<<'\n';
            continue;
        }
        bn/=g,wn/=g;
        b=bn,w=wn;
        for (int i=1;i<=n;i++){
            k=q[i][1];
            if (!q[i][0]){
                if (k<b) b-=k;
                else{
                    k-=b,b=0;
                    if (!w){
                        res++;
                        if (!k){
                            b=bn,w=wn;
                            if (k<bn) b-=k;
                        }
                        else{
                            b+=k%bn,w+=k/bn*wn;
                        }
                    }
                    else b+=k%bn,w+=k/bn*wn;
                }
            }
            else{
                if (k<w) w-=k;
                else{
                    k-=w,w=0;
                    if (!b){
                        res++;
                        if (!k){
                            b=bn,w=wn;
                            if (k<wn) w-=k;
                        }
                        else{
                            w+=k%wn,b+=k/wn*bn;
                        }
                    }
                    else w+=k%wn,b+=k/wn*bn;
                }
            }
        }
        cout<<res<<'\n';
    }
    
    return 0;
}