比赛 2024暑假C班集训C 评测结果 TAAAAAATTT
题目名称 W&B 最终得分 60
用户昵称 彭欣越 运行时间 10.519 s
代码语言 C++ 内存使用 4.04 MiB
提交时间 2024-07-12 09:52:07
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int t,n,cnt,a[100010],b[100010];
long long ans,sum1,sum2,res1,res2;
int main () {
    freopen("silly.in","r",stdin);
    freopen("silly.out","w",stdout);
    cin >> t;
    while (t--) {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        ans=0,res1=0,res2=0,cnt=0,sum1=0,sum2=0;
        cin >> n;
        for (int i=1;i<=n;i++) {
            int x;
            char s;
            cin >> x >> s;
            cnt++;
            if (s=='B') {
                a[cnt]=x;
                sum1+=x;
            }else{
                b[cnt]=x;
                sum2+=x;
            }
        }
        //cout << sum1 <<' '<< sum2 <<endl;
        if (sum1==0) {
            cout << sum2 <<endl;
            continue;
        }else if (sum2==0) {
            cout << sum1 <<endl;
            continue;
        }else if (sum1==1||sum2==1) {
            cout << 1 <<endl;
            continue;
        }
        int flag=0;
        //cout << sum1 <<' '<< sum2 <<endl;
        int t=min(sum1,sum2);
        for (int i=2;i<=t;i++) {
            while (sum1%i==0&&sum2%i==0) {
                sum1/=i;
                sum2/=i;
                flag=1;
            }
        }
        //cout << sum1 <<' '<< sum2 <<endl;
        if (flag==0) {
            cout << 1 <<endl;
            continue;
        }
        res2+=b[1];
        res1+=a[1];
        //cout << res1 <<' '<< res2 <<endl;
        for (int i=2;i<=cnt;i++) {
            if (b[i]==0) {
                for (int j=1;j<=a[i];j++) {
                    res1++;
                    //cout << res1 <<' '<< res2 <<' '<< sum1 <<' '<< sum2 <<endl;
                    if (res1%sum1==0&&res2%sum2==0&&res1/sum1==res2/sum2) {
                        ans++;
                        res1=0;
                        res2=0;
                        res1+=a[i]-j;
                        break;
                    }
                }
            }else{
                for (int j=1;j<=b[i];j++) {
                    res2++;
                    //cout << res1 <<' '<< res2 <<' '<< sum1 <<' '<< sum2 <<endl;
                    if (res1%sum1==0&&res2%sum2==0&&res1/sum1==res2/sum2) {
                        //cout << res1 <<' '<< res2 <<endl;
                        ans++;
                        res1=0;
                        res2=0;
                        res2+=b[i]-j;
                        break;
                    }
                }
            }
        }
        cout << ans <<endl;
    }
    return 0;
}