2020算法设计竞赛

https://ac.nowcoder.com/acm/contest/3004/B

构造题

构造A题中的迷宫,要求方案数整好等于给定的k,可以构造一个二进制编码器,斜对角线上的方案数恰好是1,2,3,4,8,16,32...,用二进制可以拼出所有的数字,所以一定能造的出来。

 

 如图所示,斜对角线的R对应位置是二进制数,然后只要这一位有的话就可以直接把他变成B。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int mod=1e9+7;
 4 int i,i0,n,m,ans,k;
 5 char mp[55][55];
 6 int main()
 7 {
 8     n=32,m=30;
 9     scanf("%d",&k);
10     mp[n][m]='B';
11     for(int i0=1;i0<=m;i0++)mp[1][i0]=(i0<=2)?'B':'R';
12     for(int i=2;i<=n-1;i++){
13         for(int i0=1;i0<=m;i0++){
14             if(i0<i-1)mp[i][i0]='D';
15             else if(i0<i+2)mp[i][i0]='B';
16             else mp[i][i0]='R';
17         }
18     }
19     for(int i0=1;i0<=m;i0++){
20         if(!(k&(1<<(i0-1)))) mp[i0+1][i0]='R';
21         mp[n][i0]='R';
22     }
23     printf("%d %d\n",n,m);
24     for(int i=1;i<=n;i++) printf("%s\n",mp[i]+1);
25     return 0;
26 }

 

posted @ 2020-02-09 20:23  古比  阅读(163)  评论(0编辑  收藏  举报