CF w3d1 B. Marlin
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?
Input
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.
Output
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.
Examples
inputCopy
7 2
outputCopy
YES
.......
.#.....
.#.....
.......
inputCopy
5 3
outputCopy
YES
.....
.###.
.....
.....
#include<bits/stdc++.h>
using namespace std;
int f[5][105],n,k;
int main()
{
cin>>n>>k;
cout<<"YES"<<endl;
if(k%2==0){
int cnt=0;
for(int i=2;cnt<k;i++,cnt+=2){
f[2][i]=1;
f[3][i]=1;
}
}
else if(k==1)f[2][n/2+1]=1;
else{
k--;
int mark=n/2+1,cnt=k;
f[2][mark]=1;
for(int i=1;mark-i>=2&&mark+i<=n-1;i++){
f[2][mark+i]=1;
f[2][mark-i]=1;
cnt-=2;
if(cnt==0)break;
}
if(cnt>0)for(int i=1;mark-i>=2&&mark+i<=n-1;i++){
f[3][mark+i]=1;
f[3][mark-i]=1;
cnt-=2;
if(cnt==0)break;
}
}
for(int i=1;i<=4;i++){
for(int j=1;j<=n;j++){
if(f[i][j])cout<<"#";
else cout<<".";
}
cout<<endl;
}
return 0;
}