首页 > 其他分享 >题解:P10313 [SHUPC 2024] 占地斗士!

题解:P10313 [SHUPC 2024] 占地斗士!

时间:2024-08-15 22:40:25浏览次数:11  
标签:SHUPC pd 题解 2024 mp && 图像

题目大意

给出一个由 .# 组成的\(n \times m\) 矩阵,然后再给你这 \(4\) 种图像,用着四种图像对矩阵进行覆盖(每个只能用一次)。其中,# 的位置不可以被图像遮挡,也不能放在不能放置的格子上。

解题思路

考虑使用爆搜

第一个图像:
if (mp[i][j] != '#' && mp[i + 1][j + 1] != '#' && mp[i + 1][j - 1] != '#' && mp[i - 1][j + 1] != '#' && mp[i - 1][j - 1] != '#')
第二个图像:
if (mp[i + 1][j] != '#' && mp[i][j - 1] != '#' && mp[i][j + 1] != '#' && mp[i - 1][j] != '#')
第三图像:
if (mp[i][j] != '#' && mp[i + 1][j] != '#' && mp[i + 1][j + 1] != '#' && mp[i][j + 1] != '#')
第三图像:
if (pd && !card[4] && mp[i][j] != '#' && mp[i + 1][j] != '#' && mp[i - 1][j] != '#' && mp[i][j + 1] != '#' && mp[i][j - 1] != '#')
注意:我们需要标记使用过的图像以及判断是否越界

Code

#include <bits/stdc++.h>
#define pd i + 1 <= n && j + 1 <= m &&j - 1 >= 1 && i - 1 >= 1
#define pd2 i + 1 <= n && j + 1 <= m
using namespace std;
int n, m, ans;
char mp[11][11];
bool card[5];
void dfs(int x, int cnt)
{
    ans = max(ans, cnt);
    if (x == 4)
    {
        cout << 18;
        exit(0);
    }
    for (int i = 1; i <= n; i++)
    {   
        for (int j = 1; j <= n; j++)
        {
            
            {if (pd && !card[1] && mp[i][j] != '#' && mp[i + 1][j + 1] != '#' && mp[i + 1][j - 1] != '#' && mp[i - 1][j + 1] != '#' && mp[i - 1][j - 1] != '#')
                card[1] = 1;
                mp[i][j] = mp[i + 1][j + 1] = mp[i + 1][j - 1] = mp[i - 1][j + 1] = mp[i - 1][j - 1] = '#';
                dfs(x + 1, cnt + 5);
                card[1] = 0;
                mp[i][j] = mp[i + 1][j + 1] = mp[i + 1][j - 1] = mp[i - 1][j + 1] = mp[i - 1][j - 1] = '.';
            }
            if (pd && !card[2] && mp[i + 1][j] != '#' && mp[i][j - 1] != '#' && mp[i][j + 1] != '#' && mp[i - 1][j] != '#')
            {
                card[2] = 1;
                mp[i + 1][j] = mp[i][j - 1] = mp[i][j + 1] = mp[i - 1][j] = '#';
                dfs(x + 1, cnt + 4);
                card[2] = 0;
                mp[i + 1][j] = mp[i][j - 1] = mp[i][j + 1] = mp[i - 1][j] = '.';
            }
            if (pd2 && !card[3] && mp[i][j] != '#' && mp[i + 1][j] != '#' && mp[i + 1][j + 1] != '#' && mp[i][j + 1] != '#')
            {
                card[3] = 1;
                mp[i][j] = mp[i + 1][j] = mp[i + 1][j + 1] = mp[i][j + 1] = '#';
                dfs(x + 1, cnt + 4);
                card[3] = 0;
                mp[i][j] = mp[i + 1][j] = mp[i + 1][j + 1] = mp[i][j + 1] = '.';
            }
            if (pd && !card[4] && mp[i][j] != '#' && mp[i + 1][j] != '#' && mp[i - 1][j] != '#' && mp[i][j + 1] != '#' && mp[i][j - 1] != '#')
            {
                card[4] = 1;
                mp[i][j] = mp[i + 1][j] = mp[i - 1][j] = mp[i][j + 1] = mp[i][j - 1] = '#';
                dfs(x + 1, cnt + 5);
                card[4] = 0;
                mp[i][j] = mp[i + 1][j] = mp[i - 1][j] = mp[i][j + 1] = mp[i][j - 1] = '.';
            }
        }
    }
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> mp[i][j];
    dfs(0, 0);
    cout << ans;
    return 0;
}

标签:SHUPC,pd,题解,2024,mp,&&,图像
From: https://www.cnblogs.com/ACyming/p/18361927

相关文章

  • 题解:P10111 [GESP202312 七级] 纸牌游戏
    题目大意给出三个序列:\(a\),\(b\),\(c\)分别表示:分数,罚分以及小杨从第\(1\)轮至第\(......
  • 题解:AtCoder Janken 3
    D-AtCoderJanken3题解题意高桥和青木要玩石头剪刀布,给你一个长度为\(n\)的字符串\(s\),\(s\)表示青木在第\(i\)局游戏中的动作(R表示石头,P表示布,S表示剪刀)。高桥不可以在任何一局中输给青木(即:高桥和青木只可以平局或高桥赢青木),且高桥第\(i\)局出的和第\(i-1\)局......
  • 2024.8.15随笔
    上午今天自习!写题写爽了!本来说复习顺序为PAM、后缀相关,但是hfu今天在早读完后给我们聊了一些学习的方法、给我们提供了一些学习思路。在思考了一会后,我还是决定不任性去重拾九级难度以上的后缀数组(自动机),而是回过头去复习图论。写了三道紫色的二分图,写爽了!二分图我已经很熟悉......
  • 2024.8.15
    2024.8.15【这雨生于天,死于地,中间的过程就是人生。】Thursday七月十二动态DP(DDP)我们选择从一道模板题讲起[P4719【模板】"动态DP"&动态树分治](P4719[模板]"动态DP"&动态树分治-洛谷|计算机科学教育新生态(luogu.com.cn))【模板】"动态DP"&动态树分治题目描......
  • Codeforces 232 B Table 题解 [ 蓝 ] [ 分组背包 ] [ 组合数学 ] [ 循环节 ]
    Codeforces232BTable。蒟蒻模拟赛上场切的一道蓝,非常难以置信我竟然能做蓝题。这题的数据范围初看还是比较坑的,\(10^{18}\)的值域很容易让人往矩阵加速那方面想。实际上在列出转移方程式后,我们发现状态是二维的,无法使用矩阵加速(或者说这样做很麻烦)。思路首先观察到每个边长......
  • AT_agc025_b RGB Coloring 题解
    ProblemSolution由于涂绿色的得分为\(A+B\),所以可以将红色与蓝色独立考虑。依次枚举红色的个数,假定为\(i\),所以剩余需要的得分为\(K-i\timesA\),判断是否能被\(B\)整除,若能,则蓝色个数为\(\frac{K-i\timesA}{B}\),设为\(j\),则总方案累加\(C^{i}_{n}\timesC^{j}_{n}\),除......
  • Kali 2024 逆向调试 GDB 13.2 安装插件 Peda 不兼容报错解决方案
    发现问题如果你尝试直接进行$aptinstallgdb安装后应该是最新版的gdb13.2。并且尝试安装peda后将会出现fromsix.movesimportrange报错2024版的kali的python3是python3.11版本,而peda中的six库支持的是3.11之前的。而gdb13是支持python3.12的。有趣的一点是,当我们......
  • 高级java每日一道面试题-2024年8月15日-设计模式篇-设计模式与面向对象原则的关系是什
    如果有遗漏,评论区告诉我进行补充面试官:设计模式与面向对象原则的关系是什么?我回答:在设计模式与面向对象原则的关系中,两者紧密相连且相互促进。面向对象的原则为设计模式的形成提供了理论基础和指导思想,而设计模式则是这些原则在特定问题域中的具体实践和实现方式。下......
  • 2024暑假集训测试25
    前言比赛链接。一上来就感觉T4最可做,发现T4题面假了,去找学长改了,让后第一反应二分哈希,怎么调大样例都过不去,异常上火,狂调一个半小时才想起来丫的这玩意儿没有单调性,然后就崩了。结果T4string用死了挂成\(0\)分了还。T2是水板子但是不会那个板子,心态者了T1也没搞......
  • 2024年8月杂题
    P3226[HNOI2012]集合选数很巧妙,原问题不好做,转化成矩阵上选择不相邻数字的方案,变成了我们熟悉的问题。[ARC068F]Solitaire难。题目的条件告诉我们最后队列里呈现“V”字形。如何计算删数的方案??找到合法方案的约束条件,用DP去计数,构造过程,都很难。[ARC068E]SnukeLine胡......