记录编号 590912 评测结果 AAAAAAAAAA
题目名称 W&B 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 C++ 运行时间 1.934 s
提交时间 2024-07-12 17:39:57 内存使用 3.76 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int t,n,k[100010],sb,sw,tb,tw,ans; 
char c[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--)
	{
		scanf("%d",&n);
		sw=0;
        sb=0;
		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(sw==0||sb==0)
		{ 
            printf("%d\n",sw+sb); 
            continue; 
        }
		int g=gcd(sw,sb);
        tw=0;
        tb=0;
        ans=0;
		sw/=g; 
        sb/=g;
		for(int i=1;i<=n;i++)
		{
			if(c[i]=='W')
			{
				if(tb%sb!=0)
                {
                    tw+=k[i]; 
                    continue; 
                }
				int x=tb/sb*sw;
				if(tw<x&&x<=tw+k[i]) ans++;
				tw+=k[i];
			}
			else
			{
				if(tw%sw!=0) 
                { 
                    tb+=k[i]; 
                    continue; 
                }
				int x=tw/sw*sb;
				if(tb<x&&x<=tb+k[i]) ans++;
				tb+=k[i];
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}