咀若求条
  • 板块灌水区
  • 楼主wjr_jok
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/12 19:51
  • 上次更新2024/4/12 21:09:04
查看原帖
咀若求条
1236806
wjr_jok楼主2024/4/12 19:51

题目 肯定会给关注的求大佬

#include<bits/stdc++.h>
using namespace std;
int t,n,x,s,b,w,gcd,flag,ans;
char y,jl;
long long xl[1000001],bw[1000001];
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		xl[0]=x=y=b=w=ans=0;
		for(int i=1;i<=n;i++){
			cin>>x>>y;
			if(i==1){
				if(y=='B'){
					s=1;
				}
				else{
					s=0;
				}
			}
			if(y==jl){
				xl[xl[0]]+=x;
			}	
			else{
				jl=y;
				xl[++xl[0]]=x;
				bw[xl[0]]=s;
				s=(s+1)%2;
			}
		}
		for(int i=1;i<=xl[0];i++){
			if(bw[i]){
				b+=xl[i];
			}
			else{
				w+=xl[i];
			}
		}
		if(!b||!w){
			cout<<xl[1]<<endl;
			continue;
		}
		if(__gcd(b,w)==1){
			cout<<1<<endl;
			continue;
		}
		else{
			gcd=__gcd(b,w);
			b/=gcd;
			w/=gcd;
			flag=0;
			for(int i=1;i<=xl[0];i++){
				if(bw[i]){
					if(xl[i]%b||xl[i+1]<xl[i]*(w*1.0/b)){
						flag=1;
						break;
					}
					else{
						xl[i+1]-=xl[i]*(w*1.0/b);
						if(!xl[i+1]){
							i++;
						}
					}
				}
				else{
					if(xl[i]%w||xl[i+1]<xl[i]*(b*1.0/w)){
						flag=1;
						break;
					}
					else{
						xl[i+1]-=xl[i]*(b*1.0/w);
						if(!xl[i+1]){
							i++;
						}
					}
				}
				ans++;
			}
			if(flag){
				cout<<1<<endl;
				continue;
			}
			cout<<ans<<endl;
		}
	}
	return 0;
} 
2024/4/12 19:51
加载中...