The city of Fishtopia can be imagined as a grid of 4 rows and an odd number of columns. It has two main villages; the first is located at the top-left cell (1,1), people who stay there love fishing at the Tuna pond at the bottom-right cell (4,n). The second village is located at (4,1)and its people love the Salmon pond at (1,n).
The mayor of Fishtopia wants to place k hotels in the city, each one occupying one cell. To allow people to enter the city from anywhere, hotels should not be placed on the border cells.
A person can move from one cell to another if those cells are not occupied by hotels and share a side.
Can you help the mayor place the hotels in a way such that there are equal number of shortest paths from each village to its preferred pond?
The first line of input contain two integers, n and k (3≤n≤99, 0≤k≤2×(n−2)), n is odd, the width of the city, and the number of hotels to be placed, respectively.
Print "YES", if it is possible to place all the hotels in a way that satisfies the problem statement, otherwise print "NO".
If it is possible, print an extra 4 lines that describe the city, each line should have n characters, each of which is "#" if that cell has a hotel on it, or "." if not.
7 2
YES ....... .#..... .#..... .......
5 3
YES ..... .###. ..... .....
【题意】有一个4*n的格子,有a和b两个人,a初始位于(1,1)处,要走到(n,n)处;b初始位于(4,1)处,要走到(1,n)处,可以在除了边界处的格子放置k个酒店(障碍物),人不能够通过酒店,输入一种放置方式使得a和b到达目的地的最短路的路径数目相等。
【思路】打个表发现,当酒店放置的位置关于x轴或者y轴对称的时候,最短路径的路径数目相等。
【代码如下】
#include <bits/stdc++.h>
using namespace std;
int n,k;
char str[210][210];
int main(){
scanf("%d%d",&n,&k);
for(int i = 1; i <= 4; i ++) for(int j = 1; j <= n; j ++) str[i][j] = '.';
if(k%2==0){
int c=2;
while(k){
str[2][c] = str[3][c] = '#';
c ++; k -= 2;
}
}
else{
str[2][n/2+1] = '#'; k --;
int c1=n/2,c2=(n+1)/2+1;
while(k){
str[2][c1] = str[2][c2] = '#';
c1 --; c2 ++; k -= 2;
if(c1 == 1) break;
}
c1=n/2,c2=(n+1)/2+1;
while(k){
str[3][c1] = str[3][c2] = '#';
c1 --; c2 ++; k -= 2;
if(c1 == 1) break;
}
}
puts("YES");
for(int i = 1; i <= 4; i ++){
for(int j = 1; j <= n; j ++) printf("%c",str[i][j]);
puts("");
}
return 0;
}