求条ARC B
  • 板块学术版
  • 楼主diqiuyi奶龙
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/8/4 22:03
  • 上次更新2024/8/5 08:27:18
查看原帖
求条ARC B
324666
diqiuyi奶龙楼主2024/8/4 22:03

rt,WA 一个点

#include <bits/stdc++.h>
#define ll long long
#define int long long 
using namespace std;
int t,n,m,cntx,cnty,lx,ly,nxt[500005];
string s,x,y;
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); 
	cin>>t;
	while(t--){
		cin>>s>>x>>y,n=s.size(),lx=x.size(),ly=y.size(),s='@'+s,cntx=cnty=0;
		for(int i=0;i<x.size();i++) cntx+=(x[i]=='0');
		for(int i=0;i<y.size();i++) cnty+=(y[i]=='0');
		if(cntx==cnty){
			cout<<"Yes\n";
			continue;
		}
		if(lx-ly-cntx+cnty==0){
			cout<<"No\n";
			continue; 
		}
		ll res=1ll*(cnty-cntx)*n/(lx-ly-cntx+cnty);
		if(res*(lx-ly-cntx+cnty)!=1ll*(cnty-cntx)*n||res<0){
			cout<<"No\n";
			continue;
		}
		for(int i=2;i<=n;i++){
			nxt[i]=nxt[i-1];
			while(nxt[i]&&s[i]!=s[nxt[i]+1]) nxt[i]=nxt[nxt[i]];
			if(s[i]==s[nxt[i]+1]) nxt[i]++;
		}
		int len;
		if(nxt[n]*2<n) len=n;
		else len=n-nxt[n];
		if(!(res%len)) cout<<"Yes\n";
		else cout<<"No\n";
	}
	return 0;
} 
2024/8/4 22:03
加载中...