using ll=longlong; using ull=unsignedlonglong; using pii=pair<int,int>; #define begend(x) x.begin(),x.end() #define mem0(x) memset(x,0,sizeof(x)) #define YES puts("YES") #define NO puts("NO") #define Yes puts("Yes") #define No puts("No")
intread(){ int f=1,x=0;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; }
int x,y; voidsolve(int kase){ int n=read(),m=read(),k=read(); x=read(),y=read();
bool ans = 0; for(int i=0;i<k;i++){ int xx=read(),yy=read(); if((abs(xx-x)+abs(yy-y))%2==0){ ans=1; } } if(ans)NO; else YES; }
intmain(){ int T=read(),TT=1; while(T--){ solve(TT++); } return0; }
B. Vika and the Bridge
题意
在一座桥上有 n(1≤n≤2⋅105) 块木板,每块木板都有自己的颜色 ci(1≤ci≤k≤n),现在小 A 可以把一块木板染成任意颜色。
小 A 要过桥,但是他只能踏在同一种颜色的木板上,求在染色后,他在过桥过程中需要最大连续跳过的木板数的最小值。
解法
阅读理解。虽然可能有一点点像二分答案,但其实不是。
我们可以枚举小 A 到底要走哪个颜色的木板,不难发现,这个染色的机会一定是放在空隙最大的两个木板的正中间的。因此,我们维护每个颜色的空隙前二大(因为染色后可能最大的空隙没有第二大空隙大了),然后枚举每个颜色,取最小值即可。
using ll=longlong; using ull=unsignedlonglong; using pii=pair<int,int>; #define begend(x) x.begin(),x.end() #define mem0(x) memset(x,0,sizeof(x)) #define YES puts("YES") #define NO puts("NO") #define Yes puts("Yes") #define No puts("No")
intread(){ int f=1,x=0;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; }
constint N = 2e5+5; int val[N][2]; // 空隙前 2 大 int lastpos[N]; // 颜色最后出现的位置
voidsolve(int kase){ int n=read(),k=read(); for(int i=1;i<=k;i++){ lastpos[i]=0; val[i][0]=val[i][1]=0; }
for(int i=1;i<=n;i++){ int c=read(); int dis = i-lastpos[c]-1; lastpos[c]=i;
using ll=longlong; using ull=unsignedlonglong; using pii=pair<int,int>; #define begend(x) x.begin(),x.end() #define mem0(x) memset(x,0,sizeof(x)) #define YES puts("YES") #define NO puts("NO") #define Yes puts("Yes") #define No puts("No")
intread(){ int f=1,x=0;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; }
using ll=longlong; using ull=unsignedlonglong; using pii=pair<int,int>; #define begend(x) x.begin(),x.end() #define mem0(x) memset(x,0,sizeof(x)) #define YES puts("YES") #define NO puts("NO") #define Yes puts("Yes") #define No puts("No")
using ll=longlong; using ull=unsignedlonglong; using pii=pair<int,int>; #define begend(x) x.begin(),x.end() #define mem0(x) memset(x,0,sizeof(x)) #define YES puts("YES") #define NO puts("NO") #define Yes puts("Yes") #define No puts("No")
intread(){ int f=1,x=0;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=x*10+c-'0';c=getchar();} return x*f; }