2020杭电多校 C / HDU 6879 - Mine Sweeper
题意:
t组输入,每组输入一个s
你需要输出一个r行c列的阵列,这个阵列中‘X’代表炸弹,‘.’表示没有炸弹
对于‘.’这些位置都会有一个数值,这个值取决于这个位置附近8个位置,这8个位置一共有几个炸弹,那么这个数值就是多少
你输出的r行c列阵列要满足将所有‘.’位置的数值加起来之和要等于s
题解:
网上有一种随机数生成这个阵列的方式

1 #include <bits/stdc++.h>
2 using namespace std;
3 #define between(x, a, b) (a<=x && x<=b)
4 const int dir[8][2] = {1, 0, 0, 1, -1, 0, 0, -1, -1, -1, -1, 1, 1, -1, 1, 1};
5 int n;
6
7 map<int, vector<vector<char>>> mp;
8
9 int solve(vector<vector<char>> a) {
10 int r = a.size();
11 int c = a[0].size();
12 int res = 0;
13 for (int i = 0; i < r; i++) {
14 for (int j = 0; j < c; j++) {
15 if (a[i][j] == '.') {
16 int cnt = 0;
17 for (int l = 0; l < 8; l++) {
18 int dx = i + dir[l][0];
19 int dy = j + dir[l][1];
20 if (between(dx, 0, r - 1) && between(dy, 0, c - 1) && a[dx][dy] == 'X') {
21 cnt++;
22 }
23 }
24 res += cnt;
25 }
26 }
27 }
28 return res;
29 }
30
31 void init() {
32 srand((int) time(0));
33 for (int k = 1; k <= 50000; k++) {
34 int r = (rand() % 25) + 1;
35 int c = (rand() % 25) + 1;
36 vector<vector<char>> a(r, vector<char>(c));
37 for (int i = 0; i < r; i++) {
38 for (int j = 0; j < c; j++) {
39 a[i][j] = (rand() % 2) ? 'X' : '.';
40 }
41 }
42 int sum = solve(a);
43 mp[sum] = a;
44 }
45 }
46
47 int main() {
48 ios::sync_with_stdio(false);
49 cin.tie(0), cout.tie(0);
50
51 init();
52 int T;
53 cin >> T;
54 for (int cs = 1; cs <= T; cs++) {
55 cin >> n;
56 vector<vector<char>> a = mp[n];
57
58 int r = a.size();
59 int c = a[0].size();
60 cout << r << " " << c << endl;
61 for (int i = 0; i < r; i++) {
62 for (int j = 0; j < c; j++) {
63 cout << a[i][j] << (j == c - 1 ? "\n" : "");
64 }
65 }
66 }
67 return 0;
68 }
另一种方式如下(参考:https://www.cnblogs.com/stelayuri/p/13538892.html):
如下所示一个地雷的贡献就是8

那么如果s是8的倍数,那就for循环构造多个这样的造型就可以
然后你找出来s=1、2、3、4、5、6、7的时候地雷怎么放置,特判一下s<8的情况
然后再找一下s=8k+m(1<=m<=7)
这种类型的构造一下







代码:

1 #include<bits/stdc++.h>
2 using namespace std;
3
4 int mp[1010][28][28];
5 int maxCol[1010];
6
7 void init()
8 {
9 for(int i=8;i<=1000;i++)
10 {
11 int les=i/8,j,k;
12 for(j=2;j<=24;j+=2)
13 {
14 for(k=2;k<=24;k+=2)
15 {
16 mp[i][j][k]=1;
17 if(--les==0)
18 break;
19 }
20 if(les==0)
21 break;
22 }
23 switch(i%8)
24 {
25 case 0:
26 maxCol[i]=j+1;
27 break;
28 case 1:
29 mp[i][1][1]=1;
30 maxCol[i]=j+1;
31 break;
32 case 2:
33 mp[i][1][1]=mp[i][1][2]=1;
34 maxCol[i]=j+1;
35 break;
36 case 3:
37 mp[i][1][2]=1;
38 maxCol[i]=j+1;
39 break;
40 case 4:
41 mp[i][1][2]=mp[i][2][1]=1;
42 maxCol[i]=j+1;
43 break;
44 case 5:
45 mp[i][j+2][2]=1;
46 maxCol[i]=j+2;
47 break;
48 case 6:
49 mp[i][j+2][1]=mp[i][j+2][2]=1;
50 maxCol[i]=j+2;
51 break;
52 case 7:
53 mp[i][j+3][1]=mp[i][j+3][2]=mp[i][j+2][1]=1;
54 maxCol[i]=j+3;
55 break;
56 }
57 }
58 }
59
60 int main()
61 {
62 init();
63 int T,S;
64 scanf("%d",&T);
65 while(T--)
66 {
67 scanf("%d",&S);
68 if(S>=8)
69 {
70 printf("%d 25\n",maxCol[S]);
71 for(int i=1;i<=maxCol[S];i++)
72 {
73 for(int j=1;j<=25;j++)
74 {
75 if(mp[S][i][j])
76 putchar('X');
77 else
78 putchar('.');
79 }
80 putchar('\n');
81 }
82 }
83 else if(S==0)
84 {
85 puts("1 1");
86 puts(".");
87 }
88 else if(S==1)
89 {
90 puts("1 2");
91 puts("X.");
92 }
93 else if(S==2)
94 {
95 puts("1 3");
96 puts("X.X");
97 }
98 else if(S==3)
99 {
100 puts("2 2");
101 puts("X.");
102 puts("..");
103 }
104 else if(S==4)
105 {
106 puts("2 2");
107 puts("X.");
108 puts("X.");
109 }
110 else if(S==5)
111 {
112 puts("2 3");
113 puts(".X.");
114 puts("...");
115 }
116 else if(S==6)
117 {
118 puts("2 3");
119 puts("XX.");
120 puts("...");
121 }
122 else if(S==7)
123 {
124 puts("3 3");
125 puts("XX.");
126 puts("X..");
127 puts("...");
128 }
129 }
130 return 0;
131 }
2020杭电多校 C / HDU 6879 - Mine Sweeper的更多相关文章
- 2020杭电多校 10C / HDU 6879 - Mine Sweeper (构造)
HDU 6879 - Mine Sweeper 题意 定义<扫雷>游戏的地图中每个空白格子的值为其周围八个格子内地雷的数量(即游戏内临近地雷数量的提示) 则一张地图的值\(S\)为所有空白 ...
- 【2020杭电多校】Distinct Sub-palindromes 找规律
题目链接:Distinct Sub-palindromes 题意: 给你一个长度n,你需要找出来一些串,这些串由A...Z和a...z构成.我们设长度为n的所有串中所包含回文子串最少的数量为ans.问 ...
- 【2020杭电多校】 Lead of Wisdom、The Oculus
题目链接:Lead of Wisdom 题意:有n个物品,这些物品有k种类型.每种物品有对应的类型ti,其他值ai,bi,ci,di 你可以选择一些物品,但是这些物品要保证它们任意两者之间类型不能相同 ...
- 【2020杭电多校】Total Eclipse 并查集+思维
题目链接:Total Eclipse 题意: t组输入,给你一个由n个点,m条边构成的图,每一个点的权值是ai.你每一次可以选择一批联通的点,然后让他们的权值都减去1.问最后把所有点的权值都变成0需要 ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
- 2018 Multi-University Training Contest 1 杭电多校第一场
抱着可能杭电的多校1比牛客的多校1更恐怖的想法 看到三道签到题 幸福的都快哭出来了好吗 1001 Maximum Multiple(hdoj 6298) 链接:http://acm.hdu.edu. ...
- HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...
- HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...
- HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场
题目:传送门. 题意:T组数据,每组给定一个n一个m,在给定两个长度为n的数组a和b,再给定m次操作,每次给定l和r,每次可以把[l,r]的数进行任意调换位置,问能否在转换后使得a数组变成b数组. 题 ...
随机推荐
- python3实现计算器
实验内容 1.简单计算器的设计 请设计简单的"加减乘除"计算器并从键盘上输入数据进行计算 数字的加减乘除,input返回的结果是str类型的,通过截取字符串中的运算符,来提取数字, ...
- Azure Terraform(四)状态文件存储
一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...
- (二)数据源处理3-python处理包含合并单元格的excel
分析:
- 设计一款兼容ST207和GD207的开发板
在MCU的学习中,大部分人都是学习别人的开发板,例如正点原子.野火等,优点是有可靠的教程和代码,缺点是容易让人有种自己全部都学会的了错觉,听了课程编写了代码,运行正常. 这个时候,可以尝试自已做一块属 ...
- ctfhub技能树—信息泄露—git泄露—index
打开靶机 查看页面信息 使用dirsearch进行扫描 使用githack工具处理git泄露情况 使用git log命令查看历史记录 与 add flag 9b5b58-- 这次提交进行比对 即可拿到 ...
- 视频画面中实现人脸遮挡教程 - 基于 TensorFlow 实现
在进行视频通话时,我们往往需要对画面进行一些实时分析,例如识别画面里的人.车.动物等等.这节里我们将使用时信魔方的人脸监视模块实现人脸被手部遮挡的检测,如下图所示效果: 预备知识 时信魔方的客户端使用 ...
- Poj-P3468题解【线段树】
本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: http://poj.org/problem?id=3468 题目描述: 给N个数A1, A2 ...
- Python爬虫要学什么?写给小白的Python爬虫必备技能
Python在爬虫方面用得比较多,所以你如果能掌握以下内容,找工作的时候就会顺利很多: 1.爬虫,不是抓取到数据就完事了,如果有数据抽取.清洗.消重等方面经验,也是加分项; 2.大部分的公司都要求爬虫 ...
- 打开APP 04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型? 2020-02-26 何小锋
打开APP 04 | 网络通信:RPC框架在网络通信上更倾向于哪种网络IO模型? 2020-02-26 何小锋
- 有状态(Stateful)应用的容器化 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1020178
有状态(Stateful)应用的容器化 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1020178