比赛 2024暑假C班集训C 评测结果 WWWWWWWWWW
题目名称 W&B 最终得分 0
用户昵称 小金 运行时间 1.877 s
代码语言 C++ 内存使用 3.84 MiB
提交时间 2024-07-12 11:23:52
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int t,n,n2,k[100010],sb,sw,k2[100010],ans;
char c[100010],c2[100010]; 
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int main()
{
    freopen("silly.in","r",stdin);
    freopen("silly.out","w",stdout);
    scanf("%d",&t);
    while(t--)
    {
        ans=0;
        sb=0;
        sw=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d %c",&k[i],&c[i]);
            if(c[i]=='B') sb+=k[i];
            else sw+=k[i];
        }
        if(sb==0)
        {
            printf("%d\n",sw);
            continue;
        }
        if(sw==0)
        {
            printf("%d\n",sb);
            continue;
        }
        int g=gcd(sb,sw);
        sb/=g;
        sw/=g;
        n2=0;
        for(int i=1;i<=n;i++)
        {
            if(c[i]!=c[i-1])
            {
                n2++;
                k2[n2]=k[i];
                c2[n2]=c[i];
            }
            else
            {
                k2[n2]+=k[i];
            }
        }
        for(int i=1;i<n2;i++)
        {
            if(c2[i]=='B')
            {
                if(k2[i]%sb!=0)
                {
                    ans=1;
                    break;
                }
                else
                {
                    int x=k2[i]/sb*sw;
                    if(k2[i+1]>=x)
                    {
                        k2[i+1]-=x;
                        ans++;
                    }
                    else
                    {
                        ans=1;
                        break;
                    }
                }
            }
            else
            {
                if(k2[i]%sw!=0)
                {
                    ans=1;
                    break;
                }
                else
                {
                    int x=k2[i]/sw*sb;
                    if(k2[i+1]>=x)
                    {
                        k2[i+1]-=x;
                        ans++;
                    }
                    else
                    {
                        ans=1;
                        break;
                    }
                }
            }
        }
        if(k2[n2]!=0) printf("1\n");
        else printf("%d\n",ans);
    }
    return 0;
}