Codeforces Round #575 (Div. 3) E. Connected Component on a Chessboard ###K ###K //K
题目链接:https://codeforces.ml/contest/1196/problem/E
题意:给一个黑白相间的矩阵,第一个格子的白色, 然后每次询问 怎么样构成一个连通块,使得其中有 b 个黑色格子 w个白色格子
如果存在的话输出 所有构造的格子的坐标
思路: 好坑的题意, 题目中给的chessboard 默认就是黑白相间的一个棋盘, 其他地方真没读出来是黑白相间的棋盘
然后考虑如何构造, 要么是横着(或者竖着) 直线构造, 要么就是斜对角线构造, 发现直线的时候可以满足的情况更多
构造的时候 注意先 满足 联通的条件, 一条直线先串起来 在考虑左右两边的填补
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define pb push_back 5 const int maxn =5e3+10; 6 const int mod=1e9+7; 7 8 9 10 11 int main() 12 { 13 ios::sync_with_stdio(false); 14 cin.tie(0); 15 int q; 16 cin>>q; 17 while(q--) 18 { 19 int b,w; 20 cin>>b>>w; 21 if(b*3+1<w||w*3+1<b) 22 { 23 cout<<"NO"<<'\n'; 24 } 25 else 26 { 27 cout<<"YES"<<'\n'; 28 if(b>w) 29 { 30 int wx=2,wy=2; 31 for(int i=0;i<w;i++) 32 { 33 cout<<wx<<" "<<wy<<'\n'; 34 cout<<wx<<" "<<wy+1<<'\n'; 35 wy+=2; 36 } 37 int tb=b-w; 38 if(tb) 39 { 40 tb--; 41 cout<<2<<" "<<1<<'\n'; 42 } 43 int tx=1,ty=2; 44 int nx=3,ny=2; 45 for(int i=0;i<tb;i++) 46 { 47 if(i%2) 48 { 49 cout<<tx<<" "<<ty<<'\n'; 50 ty+=2; 51 } 52 else 53 { 54 cout<<nx<<" "<<ny<<'\n'; 55 ny+=2; 56 } 57 } 58 59 } 60 else 61 { 62 int wx=2,wy=3; 63 for(int i=0;i<b;i++) 64 { 65 cout<<wx<<" "<<wy<<'\n'; 66 cout<<wx<<" "<<wy+1<<'\n'; 67 wy+=2; 68 } 69 int tw=w-b; 70 if(tw) 71 { 72 tw--; 73 cout<<2<<" "<<2<<'\n'; 74 } 75 int tx=1,ty=3; 76 int nx=3,ny=3; 77 for(int i=0;i<tw;i++) 78 { 79 if(i%2) 80 { 81 cout<<tx<<" "<<ty<<'\n'; 82 ty+=2; 83 } 84 else 85 { 86 cout<<nx<<" "<<ny<<'\n'; 87 ny+=2; 88 } 89 } 90 } 91 } 92 } 93 94 95 96 }

浙公网安备 33010602011771号