1 条题解

  • 0
    @ 2025-4-1 22:13:51

    Problem: 扫雷!

    时间限制:1s

    空间限制:256MB

    Description

    ​ 鉴于原力清理大师被 1414 种扫雷变体折磨的遍体鳞伤,于是原力清理大师秉承着“打不过就加入”的原则,立志也要做“埋雷人”。但是谁让原力清理大师自己笨呢,他不知道怎么设计比较好,于是又双叒叕向你寻求帮助。现在,原力清理大师的要求如下:

    ​ ①原力清理大师会给出一个正整数 nn ,表示所要设计的雷区边长(为 nnn*n 的正方形)。

    ​ ②雷区中每一格内可包含的元素共有三种:数字(1),问号(2),雷(3)

    ​ ③你需要给出雷的数量 mm ;然后给出初始翻开的格子数量 kk(至多为 11 ),并给出初始翻开的格子的坐标(4) (x,y)(x,y) ;最后,你需要给出一个 nnn*n 的矩阵,表示你所设计的雷区图,三类元素对应符号见上述定义。

    ​ ④你需要保证每行的雷数量、每列的雷数量都两两相等。

    ​ ⑤你还需要保证雷区连通(5),非雷区连通。

    ​ 原力清理大师是个贪心的人,他不满足于简简单单出一张图,所以,请你简简单单的出 22 张满足要求的图,而且是雷的数量不一样的 22 张图。

    注意:无论如何,第一要义是要保证你的图对于扫雷人来说可解!

    (1)(1) 数字:设该格子的坐标为 (x,y)(x,y) ,对于任意格子 (xi,yi)(x_i,y_i) ,若两格子之间满足 xix1,yiy1|x_i-x|\leq 1,|y_i-y|\leq1 ,则称格子 (xi,yi)(x_i,y_i) 在格子 (x,y)(x,y)周边。每个格子的数字代表其周边格子内雷的数量的总和对 33 取模的结果。在图中用 0099 及其之间的整数表示。

    (2)(2) 问号:该格子本质上依然为数字而非雷,但是扫雷者并不能从此得到该格子周边的雷的信息。在图中用 ?? 表示。

    (3)(3) 雷:雷,在图中用 * 表示。

    (4)(4) 定义:定义图中从上往下依次为第 0,1,...,n0,1,...,n 行,从左往右依次为 0,1,...,n0,1,...,n 列,则第 ii 行第 jj 列的格子坐标为 (i,j)(i,j)

    (5)(5) 对于任意两个格子 (x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2) ,若两个格子的曼哈顿距离 x1x2+y1y2<=1|x_1-x_2|+|y_1-y_2|<=1 ,则称这两个格子连通。

    Answer

    ​ 好多条件,完蛋了(?)

    ​ 并非完蛋。

    ​ 谁说扫雷就一定要往里面放雷了?题目没规定,那我不放雷不就是了(手动狗头)。所以,有很多种解法,就是在里面放一大堆 00 ,或者放点问号进去,或者都写问号。

    ​ 但是,两张图要求雷的数量不一样,那第二张怎么办?

    ​ 其实也很简单,你把雷放满不就是了(二连狗头)。

    ​ 至于是否有其他雷的数量的合法解?那必然是没有的。

    ​ 假设每行有雷数量 xx 个,显然每列的雷数量也为 xx ,总雷数量 m=xnm=x*n 。由于每行都有雷,而且雷都互相连通,在已知必然有雷的情况下,雷区会将图中的非雷区分为上下(或者左右)两个部分。由于非雷区也需要互相连通,所以至少被分割的两部分中至少有一部分非雷数量为 00 ,可以发现,至少有一行或者有一列,满雷。因此,每行有 nn 个雷,则图中满雷,因此没有其他合法解。

    ​ 至于数量模 33 这个条件其实影响不大,有没有都不影响解的唯一性。至于是否要翻开格子,其实也无所谓,扫雷者一看到雷的数量就明白了。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
    	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
        int n;cin>>n;
        cout<<0<<" "<<0<<endl;
        for(int i=0;i<n;i++)
        {
        	for(int j=0;j<n;j++)
        		cout<<0;
        	cout<<endl;
        }
        cout<<n*n<<" "<<0<<endl;
        for(int i=0;i<n;i++)
        {
        	for(int j=0;j<n;j++)
        		cout<<"*";
        	cout<<endl;
    	}
        return 0;
    }
    
    • 1

    信息

    ID
    373
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    32
    已通过
    7
    上传者