Problem - 2161B - Codeforces将白色的染黑 是否存在使得黑色全部连通并且没用同一方向连三个的情况如果不能连续三个 那么只能之字形连接 也就是找到对角线的起点和终点 所有的点都需要在这个之上 或者四个正方形连接观察发现 他们都是在一个对角线上的 并且两条对角线是挨着的 也就是对角线差小于等于1那么我们计算每个点的对角线值 然后让最大对角线和最小对角线的差小于等于1 这样就可以成立左到右的对角线是x-y 右到左的是xy 对于四个正方形连接的情况 令最大x 最小x差小于等于1 最大y与最小y的差也小于等于1 这样就是正方形那么三个条件满足一个就可以成立代码如下#include bits/stdc.h using namespace std; const int N105; char s[N][N]; void solve(){ int n; cinn; vectorvectorinta(n1,vectorint(n1,0)); bool ok1; int minxINT_MAX,minyINT_MAX,maxx0,maxy0; int maxl10,minl1INT_MAX; int maxl2INT_MIN,minl2INT_MAX; for(int i1;in;i){ for(int j1;jn;j){ cins[i][j]; if(s[i][j]#){ maxxmax(maxx,i); maxymax(maxy,j); minxmin(minx,i); minymin(miny,j); maxl1max(ij,maxl1); maxl2max(maxl2,i-j); minl1min(minl1,ij); minl2min(minl2,i-j); } } } if((maxx-minx1maxy-miny1)||maxl1-minl11||maxl2-minl21){ coutYES\n; }else coutNO\n; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cint; while(t--)solve(); return 0; }
Problem - 2161B - Codeforces
Problem - 2161B - Codeforces将白色的染黑 是否存在使得黑色全部连通并且没用同一方向连三个的情况如果不能连续三个 那么只能之字形连接 也就是找到对角线的起点和终点 所有的点都需要在这个之上 或者四个正方形连接观察发现 他们都是在一个对角线上的 并且两条对角线是挨着的 也就是对角线差小于等于1那么我们计算每个点的对角线值 然后让最大对角线和最小对角线的差小于等于1 这样就可以成立左到右的对角线是x-y 右到左的是xy 对于四个正方形连接的情况 令最大x 最小x差小于等于1 最大y与最小y的差也小于等于1 这样就是正方形那么三个条件满足一个就可以成立代码如下#include bits/stdc.h using namespace std; const int N105; char s[N][N]; void solve(){ int n; cinn; vectorvectorinta(n1,vectorint(n1,0)); bool ok1; int minxINT_MAX,minyINT_MAX,maxx0,maxy0; int maxl10,minl1INT_MAX; int maxl2INT_MIN,minl2INT_MAX; for(int i1;in;i){ for(int j1;jn;j){ cins[i][j]; if(s[i][j]#){ maxxmax(maxx,i); maxymax(maxy,j); minxmin(minx,i); minymin(miny,j); maxl1max(ij,maxl1); maxl2max(maxl2,i-j); minl1min(minl1,ij); minl2min(minl2,i-j); } } } if((maxx-minx1maxy-miny1)||maxl1-minl11||maxl2-minl21){ coutYES\n; }else coutNO\n; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cint; while(t--)solve(); return 0; }