題意:給你一個4*n的網格,保證n爲奇數,讓你在其中放k個障礙物,不能放在邊界的格子上,使得從左上角走到右下角的最短路的方案數,剛好等於從左下角走到右上角的最短路的方案數。spa
k爲偶數時,以縱向爲對稱軸進行擺放便可。blog
k爲奇數且小於等於n-2時,以下圖橫向對稱擺放:io
...........
...........
...#####...
...........class
k等於n時,以下圖:di
.............
.#.........#.
.###########.
.............return
k大於n時,在上圖空閒的位置隨便填便可。
#include<cstdio> using namespace std; int n,K; char a[6][105]; int main(){ scanf("%d%d",&n,&K); for(int i=1;i<=4;++i){ for(int j=1;j<=n;++j){ a[i][j]='.'; } } puts("YES"); if(K%2==0){ K/=2; for(int i=1;i<=K;++i){ a[2][i+1]=a[3][i+1]='#'; } } else{ if(n==1){ a[2][2]='#'; } else if(K<=n-2){ for(int i=1,j=(n-K)/2+1;i<=K;++i,++j){ a[3][j]='#'; } } else if(K==n){ for(int i=1,j=2;i<=n-2;++i,++j){ a[3][j]='#'; } a[2][2]=a[2][n-1]='#'; } else{ for(int i=1,j=2;i<=n-2;++i,++j){ a[3][j]='#'; } a[2][2]=a[2][n-1]='#'; for(int i=3,j=1;i<=n-2 && j<=K-n;++i,++j){ a[2][i]='#'; } } } for(int i=1;i<=4;++i){ for(int j=1;j<=n;++j){ putchar(a[i][j]); } puts(""); } return 0; }