代码求调,AT上交只WA了5个点
查看原帖
代码求调,AT上交只WA了5个点
1219653
__AFO__楼主2024/8/14 14:57
#include<bits/stdc++.h>
using namespace std;
long long t,n;
string s,k; 
struct nn{
	long long l,r;
}a[200005],cnt[200005];
int main(){
	scanf("%lld",&t);
	while(t--){`
		scanf("%lld",&n);
		cin>>s>>k;
		long long p=0,q,h=0,f=0;
		for(long long i=0;i<n;i++){
			if(k[i]=='C'){
			q=i-1;
			if(q>p){
			h++;
			a[h].l=p;
			a[h].r=q;
			p=i+1;
			if(s[i]!='C'&&k[i]=='C'){
				f=1;
			}	
			}	
			}
		}
		if(k[n]!='C'){
			h++;
			a[h].l=p;
			a[h].r=n-1;
		}
		if(f==1) printf("No\n");
		else{
			long long w=0;
			for(long long i=1;i<=h;i++){
			//	cout<<a[i].l<<" "<<a[i].r<<" ";
				long long aa=0,bb=0,x=0,y=0,r=0;
				for(long long j=a[i].l;j<=a[i].r;j++){
					if(s[j]=='A') aa++;
					if(s[j]=='B') bb++;
					if(k[j]=='A') x++;
					if(k[j]=='B') y++;
					if(s[j]=='C') r++;
				}
			//	cout<<aa<<" "<<bb<<" "<<x<<" "<<y<<" "<<r<<endl;
				if(aa>x||bb>y||aa+r<x||bb+r<y){
					printf("No\n");
					w=1;
					break;
				}
				r=x-aa;
				long long o=0,l=0;
				for(long long j=a[i].l;j<=a[i].r;j++){
					if(r>0&&s[j]=='C'){
						r--;
						o++;
						cnt[o].l=j;
					}
					if(s[j]=='A'){
						o++;
						cnt[o].l=j;
					}
					if(k[j]=='A'){
						l++;
						cnt[l].r=j;
					}
				}
				for(long long j=1;j<=o;j++){
				//	cout<<cnt[j].l<<" "<<cnt[j].r<<endl;
					if(cnt[j].l>cnt[j].r){
						printf("No\n");
						w=1;
						break;
					}
				}
				if(w==1) break;
			}
			if(w!=1){
				printf("Yes\n");
			}
		}
	}
	return 0;
}
2024/8/14 14:57
加载中...