NC21646. 牛牛的迷宫题
描述
输入描述
输入一个整数K (2 ≤ K ≤ 1000)
输出描述
第一行输出两个整数n,m
接下来输出n行,每行包含一个长度为m的字符串,只能由'.' 或者'#'构成
1 ≤ n ≤ 50
1 ≤ m ≤ 50
示例1
输入:
3
输出:
1 4 ....
示例2
输入:
4
输出:
3 3 ... ... ...
示例3
输入:
10
输出:
5 5 ..#.. #.#.. ..#.. .#... .....
C++ 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2022-01-25 11:37:44
#include <bits/stdc++.h> using namespace std; int n,m,k; char c[60][60]; bool b[60][60]; int main() { cin>>k; for(int i=1;i<=50;i++){ for(int j=1;j<=50;j++)c[i][j]='#'; } if(k<50){ cout<<1<<" "<<k+1<<endl; for(int i=1;i<=k+1;i++)cout<<'.'; cout<<endl; return 0; } k++; int dx=1; int m=50; int nx=1,ny=1; while(k>0){ n=max(n,nx); // cout<<nx<<" "<<ny<<" "<<k<<endl; c[nx][ny]='.'; k--; if(dx==-1){ if(k<=m*2&&(m-ny)%2!=k%2){ nx++; continue; } } if(m-ny+2==k){ // cout<<"tsejiijs"<<nx<<" "<<ny<<endl; c[nx+1][ny]='.'; for(int i=ny;i<=m;i++){ c[nx+2][i]='.'; } n=nx+2; break; } if((dx==1||dx==0)&&ny==m){ dx--; nx++; continue; } if((dx==-1||dx==0)&&ny==1){ dx++; nx++; continue; } ny+=dx; } cout<<n<<" "<<m<<endl; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)cout<<c[i][j]; cout<<"\n"; } return 0; }