[CF2057G] Secret Message 题解

news/2025/1/15 20:46:04/文章来源:https://www.cnblogs.com/wfc284/p/18673694

神秘题目。

题目的条件十分神奇,\(|A| \le \frac{1}{5} (s+p)\),不知所云。
一开始尝试用皮克定理转化,但是 failed。
阅读理解之后发现有一个(很典)的套路,就是构造出五组方案,使得 \(\sum_{cyc} |A| = s+p\),这样就一定有一组方案,面积小于等于 $ \frac{1}{5} (s+p)$。

如何构造?
我们发现一个格子可以【控制】周围四个,带上自己五个格子。差不多这样:

发现如果按照 \((2i+j) \mod 5\) 的余数来分类的话,总共五种方案,刚好每一种余数可以【密铺】整个地图。显然,这样覆盖,五种方案个数和是 \(s\)
同时,对于边界上的没有覆盖到的,我们直接花一个方格放上去。可以证明(懒),这样带来的额外代价之和就是 \(p\)。(感性理解就是只有边界上的格子会额外贡献,且有几条边【孤立】就会额外贡献几遍)

于是我们构造出来这五种方案,取个最小值就是一组可行的解。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define Linf 0x3f3f3f3f3f3f3f3f
#define pii pair<int, int> 
#define all(v) v.begin(), v.end()
using namespace std;//#define filename "xxx" 
#define FileOperations() freopen(filename".in", "r", stdin), freopen(filename".out", "w", stdout)
#define multi_cases 1namespace Traveller {const int N = 2e6+2;const int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int n, m;int pos(int i, int j) { return (i-1) * m + j; }char g[N];bool mark[N];char ans[5][N];void main() {cin >> n >> m;for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) cin >> g[pos(i, j)];for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j) for(int k = 0; k < 5; ++k) ans[k][pos(i, j)] = 0;int mn = inf, p = 0;for(int k = 0; k < 5; ++k) {int cnt = 0;for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j) mark[pos(i, j)] = 0;for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j)if(g[pos(i, j)] == '#' && (2*i + j) % 5 == k) {mark[pos(i, j)] = 1;++cnt, ans[k][pos(i, j)] = 'S';for(int d = 0; d < 4; ++d) {int nx = i + dir[d][0], ny = j + dir[d][1];if(nx < 1 || nx > n || ny < 1 || ny > m || g[pos(nx, ny)] == '.') continue;mark[pos(nx, ny)] = 1; }}for(int i = 1; i <= n; ++i)for(int j = 1; j <= m; ++j) if(g[pos(i, j)] == '#' && !mark[pos(i, j)]) {++cnt, ans[k][pos(i, j)] = 'S';mark[pos(i, j)] = 1;}if(cnt < mn) mn = cnt, p = k;}for(int i = 1; i <= n; ++i, puts(""))for(int j = 1; j <= m; ++j)if(ans[p][pos(i, j)] == 'S') cout << 'S';else cout << g[pos(i, j)];}
}signed main() {
#ifdef filenameFileOperations();
#endifsigned _ = 1;
#ifdef multi_casesscanf("%d", &_);
#endifwhile(_--) Traveller::main();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

装机重启后无法进入图形界面

装机重启后无法进入图形界面 A problem has occurred and the system cant recover. Please log out and try again. 主要原因可能是安装的软件包未更新,更新即可 (yum update) 报错截图首先进入命令行界面并登录root账户 Ctrl+Alt+F2联网 对于rocky系统,查看网络设备: nmcl…

【MATLAB】自学记录之基于某楼栋房价数据绘制三维网格图

1. 前言 基于某小区某一楼栋各个户型及楼层之间对应的出售价格表,通过MATLAB脚本进行读取解析,并绘制成三维网格图,从而能够直观地以可视化的角度观察户型位置(东边户、西边户、中间连廊户)、楼层位置(高中低楼层)等因素是否与出售价格存在一定的影响关系。2. 预置条件序…

【前端】谈谈水印实现的几种方式

遇到问题 日常工作中,经常会遇到很多敏感的数据,为防止数据的泄露,我们要在数据上做一些”包装“。目的就是让那些有心泄露数据的”不法分子“迫于严重的”舆论压力“而放弃不法行为,使之”犯罪未遂“,达到不战而屈人之兵的效果。而在安全部门工作的我们,数据安全的观念早…

插头DP记录

关于插头dp。AAA黑题批发。 这个东西好像设问还挺广泛的,做到哪写到哪吧。 得先了解一下轮廓线dp定义。 概念 设问广泛但是总体来说是连通性相关状压dp的一类设计方法。 骨牌覆盖问题 比如说,最简单的,问你 \(n*m\) 的棋盘格里能放多少 \(1*2\) 的骨牌。 考虑把一个节点分为…

03_LaTeX之文档元素

在知道了如何输入文字后,在本章了解一个结构化的文档所依赖的各种元素——章节、目录、列表、图表、交叉引用、脚注等等。目录03_\(\LaTeX{}\) 之文档元素章节和目录章节标题目录文档结构的划分标题页交叉引用脚注和边注特殊环境列表对齐环境引用环境摘要环境代码环境表格列格…

THREE.js学习笔记6——Geometries

这一小节学习THREE.js中的物理模型。 什么是geometry?(英文解释,翻译为中文就看不懂了,直接看英语吧)Composed of vertices (point coordinates in 3D spaces)and faces (triangles that join those vertices to create a surface) Can be used for meshes but also for par…

第三节 回归实战

数据处理超参:人为指定不能改变测试数据只有x没有标签y 训练数据拆分,82开,作训练集和验证集(验证模型好坏),模型训练不是一路上升的过程,训练几次验证一次,最好的模型save下来 one-hot独热编码 猪(1 0 0) 狗(0 1 0) 猫(0 0 1) def get_feature_importance(feature_data, label…

Windows git bash 文字显示/斜杠开头数字

前言全局说明Windows git bash 文字显示/斜杠开头数字一、说明 详细介绍:https://zhuanlan.zhihu.com/p/133706032二、问题三、解决方法 git config --global core.quotepath false免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。参考、来源: h…

DDR 带宽的计算与监控

DDR 带宽(Double Data Rate Bandwidth)是指 DDR 内存在一秒内可以传输的数据量,通常以 GB/s(Gigabytes per second) 为单位。它是衡量内存系统性能的重要指标,直接影响系统的数据吞吐能力。 1.如何计算 DDR 带宽 计算 DDR 理论带宽的公式为: DDR主频 * 位宽 = 理论带宽其…

1.15

尽力了,之前的粗心导致现在要改很多以前的坑,明天再继续

中考英语优秀范文-热点话题-传统文化-006 Welcome to Chinese Summer Camp 欢迎参加中国夏令营

1 写作要求 假定你是李华,你校今年暑假将为外国学生举办一场汉语夏令营活动(Chinese Summer Camp)。请你根据下面海报的内容,用英语给你的笔友David写一封电子邮件,介绍本次活动并邀请他参加。词数80左右。 Welcome to Chinese Summer Camp Time:July 18th—July 28th, 2…

机器人

本文来自博客园,作者:Traktorea,转载请注明原文链接:https://www.cnblogs.com/kdsmyhome/p/18673586