20求调
查看原帖
20求调
1127126
yueyan_WZF楼主2024/8/11 16:00
#include<bits/stdc++.h>
using namespace std;
int T;
int a[2000030];
int vis[2000030];
int main(){
	scanf("%d",&T);
	while(T--){
		int n,m;
		memset(a,0x3f3f3f3f,sizeof(a));
		memset(vis,0,sizeof(vis));
		scanf("%d%d",&n,&m);
		if(m==0) printf("Yes\n");
		else{
			for(int i=1;i<=m;i++){
				int p,x;
				scanf("%d%d",&p,&x);
				a[p]=x;
			}
			int x=-1;
			bool f=0,ok=0;
			for(int i=1;i<=n;i++){
				if(a[i]==0x3f3f3f3f) continue;
				if(a[i-1]!=0x3f3f3f3f&&a[i]!=0x3f3f3f3f&&f==0){
					x=abs(a[i]-a[i-1]);
					f=1;
				}
				if(a[i-1]!=0x3f3f3f3f&&a[i]!=0x3f3f3f3f&&f==1){
					if(abs(a[i]-a[i-1])!=x){
						printf("No\n");
						ok=1;
						break;
					}
				}
			}
			if(ok==1) continue;
			else{
				int l,r;
				int len;
				if(x==-1){
					for(int i=1;i<=n;i++){
						if(a[i]==0x3f3f3f3f&&vis[i]==0){
							l=0,r=0;
							while(a[i-l]==0x3f3f3f3f) l++,vis[i-l]=1;
							while(a[i+r]==0x3f3f3f3f) r++,vis[i+r]=1;
							if((abs(a[(i+r)]-a[(i-l)])/(i+r-i+l))%1!=0){
								ok=1;				
								//cout<<(abs(a[(i+r)]-a[(i-l)])/(i+r-i+l))<<endl;
								printf("No\n");
								
								break;
							}
						}
					}
					if(ok==1) continue;
				}
				else{
					for(int i=1;i<=n;i++){
						if(a[i]==0x3f3f3f3f&&vis[i]==0){
							l=0,r=0;
							while(a[i-l]==0x3f3f3f3f) l++,vis[i-l]=1;
							while(a[i+r]==0x3f3f3f3f) r++,vis[i+r]=1;
							if(abs(a[(i+r)]-a[(i-l)])/(i+r-i+l)!=x){
								ok=1;				
								//cout<<i-l<<" "<<i+r<<endl;
								printf("No\n");
								
								break;
							}
						}
					}
					if(ok==1) continue;
				}
				
			}
			printf("Yes\n");
		}
	}
}

#5 TLE

#7,#9,#10,#14,#16~18 WA

2024/8/11 16:00
加载中...