B. Putting Bricks in the Wall(思维)

it2025-02-28  25

B. Putting Bricks in the Wall

time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Pink Floyd are pulling a prank on Roger Waters. They know he doesn’t like walls, he wants to be able to walk freely, so they are blocking him from exiting his room which can be seen as a grid.

Roger Waters has a square grid of size n×n and he wants to traverse his grid from the upper left (1,1) corner to the lower right corner (n,n). Waters can move from a square to any other square adjacent by a side, as long as he is still in the grid. Also except for the cells (1,1) and (n,n) every cell has a value 0 or 1 in it.

Before starting his traversal he will pick either a 0 or a 1 and will be able to only go to cells values in which are equal to the digit he chose. The starting and finishing cells (1,1) and (n,n) are exempt from this rule, he may go through them regardless of picked digit. Because of this the cell (1,1) takes value the letter ‘S’ and the cell (n,n) takes value the letter ‘F’.

For example, in the first example test case, he can go from (1,1) to (n,n) by using the zeroes on this path: (1,1), (2,1), (2,2), (2,3), (3,3), (3,4), (4,4)

The rest of the band (Pink Floyd) wants Waters to not be able to do his traversal, so while he is not looking they will invert at most two cells in the grid (from 0 to 1 or vice versa). They are afraid they will not be quick enough and asked for your help in choosing the cells. Note that you cannot invert cells (1,1) and (n,n).

We can show that there always exists a solution for the given constraints.

Also note that Waters will pick his digit of the traversal after the band has changed his grid, so he must not be able to reach (n,n) no matter what digit he picks.

Input Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤50). Description of the test cases follows.

The first line of each test case contains one integers n (3≤n≤200).

The following n lines of each test case contain the binary grid, square (1,1) being colored in ‘S’ and square (n,n) being colored in ‘F’.

The sum of values of n doesn’t exceed 200.

Output For each test case output on the first line an integer c (0≤c≤2) — the number of inverted cells.

In i-th of the following c lines, print the coordinates of the i-th cell you inverted. You may not invert the same cell twice. Note that you cannot invert cells (1,1) and (n,n).

Example inputCopy 3 4 S010 0001 1000 111F 3 S10 101 01F 5 S0101 00000 01111 11111 0001F outputCopy 1 3 4 2 1 2 2 1 0 Note For the first test case, after inverting the cell, we get the following grid:

S010 0001 1001 111F

***思路***题目大致意思是在地图上有人要从左上角走到右下角,他只能选择0走或者只能选择1走,而你有最多两次的改变数字的机会,问怎么改可以使那个人永远走不到终点。通过观察几组测试数据我们可以发现,因为你有两次修改机会,所以我们可以把临近起点的两个点和临近终点的两个点置为不同的点就行了,这样他就永远无法走到终点,因为他不能走不同的点,一次只能选择一种点。注意情况考虑全面。

```cpp 在这里插入代码片 ```#include<bits/stdc++.h> using namespace std; typedef long long ll; char a[300][300]; int main() { int t; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); int n; scanf("%d",&n); for(int i=1;i<=n;i++){ getchar(); for(int j=1;j<=n;j++) { scanf("%c",&a[i][j]); } } int qi=a[1][2]-'0'+a[2][1]-'0'; int zhong=a[n][n-1]-'0'+a[n-1][n]-'0'; if(qi==2) { if(zhong==2){ printf("2\n"); printf("%d %d\n%d %d\n",n,n-1,n-1,n); }else if(zhong==1) { printf("1\n"); if(a[n][n-1]-'0'==1) { printf("%d %d\n",n,n-1); }else{ printf("%d %d\n",n-1,n); } }else if(zhong==0) { printf("0\n"); } } else if(qi==1) { if(zhong==2) { printf("1\n"); if(a[1][2]-'0'==1) { printf("1 2\n"); }else { printf("2 1\n"); } }else if(zhong==1){ printf("2\n"); if(a[1][2]-'0'==1) { printf("1 2\n"); }else { printf("2 1\n"); } if(a[n][n-1]-'0'==1) { printf("%d %d\n",n-1,n); }else{ printf("%d %d\n",n,n-1); } }else{ printf("1\n"); if(a[1][2]-'0'==1) { printf("2 1\n"); }else { printf("1 2\n"); } } }else { if(zhong==2){ printf("0\n"); }else if(zhong==1) { printf("1\n"); if(a[n][n-1]-'0'==0) { printf("%d %d\n",n,n-1); }else{ printf("%d %d\n",n-1,n); } }else if(zhong==0) { printf("2\n"); printf("%d %d\n%d %d\n",n,n-1,n-1,n); } } } return 0; }
最新回复(0)