D. Alice and the Doll

mac2026-04-01  4

http://codeforces.com/contest/1236/problem/D

#include <bits/stdc++.h> //#include <cmath> //#include <iostream> //#include <unordered_map> #define mem(x,y) memset(x,y,sizeof(x)) #define pb push_back #define INF 0x3f3f3f3f #define ll long long #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; const int mod=1e9+7; const int N=1e5+9; set<int>x[N],y[N]; int n,m,k; int main() { FAST_IO; cin>>n>>m>>k; for(int i=1;i<=n;i++) x[i].insert(0),x[i].insert(m+1); for(int i=1;i<=m;i++) y[i].insert(0),y[i].insert(n+1); for(int i=0;i<k;i++) { int xx,yy; cin>>xx>>yy; x[xx].insert(yy); y[yy].insert(xx); } ll ans=1; int nowx=1; int nowy=1; int nx=n,ny=m; int maxx=n,maxy=m,minx=1,miny=1; for(int i=0;;i++) { if(i%4==0) { nx=nowx; int posy=*x[nowx].lower_bound(nowy); ny=min(maxy,posy-1); minx=nx+1; } else if(i%4==1) { ny=nowy; int posx=*y[nowy].lower_bound(nowx); nx=min(posx-1,maxx); maxy=ny-1; } else if(i%4==2) { nx=nowx; auto it=x[nowx].lower_bound(nowy); it--; int posy=*(it); ny=max(miny,posy+1); maxx=nx-1; } else { ny=nowy; auto it=y[nowy].lower_bound(nowx); it--; int posx=*(it); nx=max(minx,posx+1); miny=ny+1; } ans+=abs(nx-nowx)+abs(ny-nowy); //cout<<nowx<<" "<<nowy<<" "<<nx<<" "<<ny<<" "<<ans<<endl; if(nx==nowx&&ny==nowy) { if(nowx==1&&nowy==1&&i%4==0); else break; } nowx=nx; nowy=ny; } if(ans==(ll)m*n-k) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }

 

最新回复(0)