2020杭电多校第十场1003(HDU|2020杭电多校第十场1003(HDU 6879)
Mine Sweeper(扫雷)
文章图片
玩过扫雷的(不会还有人没玩过扫雷吧,不会吧不会吧 )都知道,地图中显示的数字代表这个数字的周围有多少个地雷。题意很简单,就给一个数n,让你构造一个布雷的地图,使图中的每个数字的和为n。
我们只要先把地图的所有格子都埋下雷,然后一个一个挖出来。很容易知道地图中的数字最大只可能是8,也就是周围所有格子都是雷。我们只要把n整除8,得到t代表中间挖掉的雷的个数,把n mod 8,得到的m用来处理边角(至于为什么就不用我赘述了吧)。
文章图片
--------------------------上图为周围都是雷的情况----------------------------
要注意的是,n比较小的时候要单独拿出来做,聪明的你一定能想到为什么(所以我也不多说了)。
下面贴代码
#include
using namespace std ;
typedef long long ll;
const int maxn = 50;
int n ;
int mp[maxn][maxn] ;
int main(){
int T;
cin>>T;
while(T--)
{
scanf("%d",&n);
memset(mp,0,sizeof mp) ;
if(n < 25){
printf("1 %d\n",n+1) ;
for(int i = 1;
i <= n+1 ;
i++){
if(i&1)
printf("X") ;
else printf(".") ;
}
printf("\n") ;
}
else{
double sum = n / 8 ;
int xlen = sum / 12 ;
int c = n % 8 ;
printf("25 25\n") ;
for(int i = 1 ;
i <= xlen ;
i++){
for(int j = 1 ;
j <= 12 ;
j++)
mp[i*2][j*2] = 1 ;
}
if(xlen * 12 < sum){
inty = sum - xlen * 12 ;
for(int i = 1 ;
i <= y ;
i++)
mp[xlen*2+2][2*i] = 1 ;
}
//下面处理边角
if(c == 1) mp[1][1] = 1 ;
else if(c== 2) mp[1][1] = mp[1][2] = 1 ;
else if(c == 3)mp[25][1] = 1 ;
else if(c == 4) mp[1][1] =mp[25][1] = 1 ;
else if(c == 5) mp[25][2] = 1 ;
else if(c == 6) mp[25][25] = mp[25][1] = 1 ;
else if(c == 7) mp[1][1] =mp[25][25] = mp[25][1] = 1;
for(int i = 1 ;
i <= 25 ;
i++){
for(int j = 1 ;
j <= 25 ;
j++){
if(mp[i][j])
printf(".") ;
else
printf("X") ;
}
printf("\n") ;
}
}
}
return 0 ;
}
【2020杭电多校第十场1003(HDU|2020杭电多校第十场1003(HDU 6879)】水平和文笔拙劣,请见谅qwq,也请dalao们多多帮忙嘤嘤嘤~~~
推荐阅读
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 2020-04-07vue中Axios的封装和API接口的管理
- 2020-10-18|2020-10-18 致各位慢友
- 愉悦的周末(134)2020-9-20
- “沉溺”疫情
- 杭电oj——2030汉字统计
- 感恩日记第111篇2020.02.06
- 2020-12(完成事项)
- 清闲
- 学员+3组杨子涓+202002RIA训练营W3D2+苏格拉底提问法