杭电多校第10场 HDU6879 Mine Sweeper(构造)

2024-04-15 23:58

本文主要是介绍杭电多校第10场 HDU6879 Mine Sweeper(构造),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

题意:
扫雷游戏,要求你构造最多25*25大的棋盘,合理的放置雷,使得每个位置的权值和为n(n≤1000)。每个位置的权值为周围8个位置雷的数量,雷的权值为0。

思路:
考虑依次间隔的放雷,那么每个雷的贡献就是8。
那么最后可以弄成8x+y的形式。

我们依次的凑,可以在全图里凑出这些3 5 6 7 11这几个数。
在这里插入图片描述

在部分图里凑出1 2 3 4 5 6 7这几个数。
在这里插入图片描述

当n≤7的时候,按照部分图的样子直接输出。
当n≥8的时候,表示成n=8x+y,按照余数分配一下就好了

在这里插入图片描述

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>using namespace std;char a[30][30];void Print() {for(int i = 1;i <= 25;i++) {for(int j = 1;j <= 25;j++) {if(a[i][j] == 'X') printf("%c",a[i][j]);else printf(".");}printf("\n");}
}int main() {int T;scanf("%d",&T);while(T--) {memset(a,0,sizeof(a));int n;scanf("%d",&n);if(n == 1) printf("1 2\nX.\n");else if(n == 2) printf("1 3\n.X.\n");else if(n == 3) printf("2 2\n..\nX.\n");else if(n == 4) printf("2 2\nX.\nX.\n");else if(n == 5) printf("2 3\n...\n.X.\n");else if(n == 6) printf("2 3\n...\nXX.\n");else if(n == 7) printf("3 3\n...\nX..\nXX.\n");else {printf("25 25\n");int num1 = n / 8, num2 = n % 8;if(num2 == 1) {num1--;a[25][1] = 'X';a[25][25] = a[25][24] = 'X';} else if(num2 == 2) {num1--;a[25][1] = 'X';a[25][25] = a[25][24] = a[24][25] = 'X';} else if(num2 == 3) {a[25][1] = 'X';} else if(num2 == 4) {num1--;a[25][1] = a[25][2] = 'X';a[25][25] = a[25][24] = 'X';} else if(num2 == 5) {a[25][2] = 'X';} else if(num2 == 6) {a[25][1] = a[25][2] = 'X';} else if(num2 == 7) {a[25][25] = a[25][24] = a[24][25] = 'X';}for(int i = 2;i <= 25;i += 2) {for(int j = 2;j <= 25;j += 2) {if(num1) a[i][j] = 'X';else break;num1--;}}Print();}}return 0;
}

这篇关于杭电多校第10场 HDU6879 Mine Sweeper(构造)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907285

相关文章

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

Codeforces Round #281 (Div. 2)A(构造+暴力模拟)

题目链接:http://codeforces.com/problemset/problem/493/A 解题思路: 暴力的判断,分三种情况去判断即可。注意如果之前已经被罚下场后,那么在后面的罚下情况不应该算在输出结果内。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <co

Codeforces Round #233 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/399/problem/A 解题思路: 构造出来即可,考虑p-k和p+k两个边界分别于1和n作比较,对左右符号特殊处理。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include

Codeforces Round #247 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/431/problem/A 解题思路: 构造出来即可。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <string>#inc

C函数特性:构造与析构(constructor destructor)

文章目录 0x1 constructor0x2 constructor_priority0x3 destructor0x4 destructor_priority 0x1 constructor attribute((constructor)) 是 GCC 编译器的一个特性,它允许定义一个特殊的函数,这个函数会在 main 函数执行之前,也就是程序开始执行时被调用。 这通常用于执

C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现

二叉树习题1.通过前序序列和中序序列构造二叉树2.通过层次遍历序列和中序序列创建一棵二叉树3.求一棵二叉树的结点个数4.求一棵二叉树的叶子节点数5.求一棵二叉树中度为1的节点个数6.求二叉树的高度7.求一棵二叉树中值为x的节点作为根节点的子树深度8.判断两棵树是否相似,相似返回1,不相似返回09.设计算法利用叶子结点中的空指针域将所有叶子结点链接成一个带头结的双链表10.假设一个仅包含二元运算的算