比赛 |
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;
}