wa了,86分,小数据对拍能过,求助!
查看原帖
wa了,86分,小数据对拍能过,求助!
182766
吴彬……楼主2021/8/12 19:00
#include<bits/stdc++.h>
using namespace std;
int t,n,m,cd,gs;
long long ssb[1001000];//素数表
bool hs[1001000];//合数
long long a[100100],b[100100],c[100100];
bool pd(long long x){//判断素数,合数
	for(int i=1;ssb[i]*ssb[i]<=x;i++)
		if(x!=ssb[i]&&x%ssb[i]==0) return 1;
	return 0;
}
void ycl(){//预处理素数
	for(int i=2;i<=1000000;i++){
		if(hs[i]) continue;
		gs++,ssb[gs]=i;
		int k=2;
		while(i*k<=1000000)
			hs[i*k]=1,k++;
	}
}
int main(){
	ycl();
	cin>>t;
	while(t--){
		bool flag=1;
		cin>>n>>m;
		cd=0;
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=1;i<=m;i++) cin>>b[i];
		if(m==0){
			for(int i=1;i<=n;i++){
				if(a[i]==c[cd]&&a[i]!=1){
					flag=0;break;
				}
				cd++,c[cd]=a[i];
			}
		}
		for(int i=1,j=1;i<=n&&j<=m;j++){
			while(a[i]!=b[j]){
				if(a[i]==c[cd]&&a[i]!=1){
					flag=0;break;
				}
				else cd++,c[cd]=a[i];
				i++;
			}
			if(flag==0) break;
			i++;
			if(j==m){
				while(i<=n){
					if(a[i]==c[cd]&&a[i]!=1){
						flag=0;break;
					}
					cd++,c[cd]=a[i];
					i++;
				}
			}
		}
		if(flag==0){
			cout<<"NO"<<endl;
			continue;
		}
		for(int i=1;i<=cd;i++)
			if(pd(c[i])){flag=0;break;}
		if(flag==0) cout<<"NO"<<endl;
		else cout<<"YES"<<endl;
		//先除同 再找2 最后找合数 
	}
	return 0;
}
2021/8/12 19:00
加载中...