求I-I A C IC(玄关)
  • 板块学术版
  • 楼主wjr_jok
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/14 21:09
  • 上次更新2024/4/15 09:33:17
查看原帖
求I-I A C IC(玄关)
1236806
wjr_jok楼主2024/4/14 21:09

题目

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t,n,x;
int b,w;
int cnt1,cnt2,gcd,ans;
char y,jl;
int xl[100001],bw[100001];
signed main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=0;i<=n;i++){
			xl[i]=bw[i]=0;
		}
		b=w=cnt1=cnt2=gcd=ans=y=jl=0;
		for(int i=1;i<=n;i++){
			cin>>x>>y;
			if(y=='B'){
				b+=x;
			}
			else{
				w+=x;
			}
			if(y==jl){
				xl[xl[0]]+=x;
			}	
			else{
				jl=y;
				xl[++xl[0]]+=x;
				if(jl=='B'){
					bw[xl[0]]=1;
				}
				else{
					bw[xl[0]]=0;
				}
			}
		}
		if(!b||!w){
			cout<<b+w<<endl;
			continue;
		}
		else{
			gcd=__gcd(b,w);
			b/=gcd;
			w/=gcd;
			for(int i=1;i<=xl[0];i++){
				if(bw[i]){
					cnt1+=xl[i];
					if(cnt2&&cnt2%w==0&&cnt1>=cnt2/w*b){
						ans++;
						cnt1=min(cnt1-cnt2/w*b,xl[i]);
						cnt2=0;
					}
				}
				else{
					cnt2+=xl[i];
					if(cnt1&&cnt1%b==0&&cnt2>=cnt1/b*w){
						ans++;
						cnt2=min(cnt2-cnt1/b*w,xl[i]);
						cnt1=0;
					}
				}
			}
			if(cnt1||cnt2){
				cout<<1<<endl;
			}
			else{
				cout<<ans<<endl;
			}
		}
	}
	return 0;
} 
2024/4/14 21:09
加载中...