传送门

题意: 给你一个n×mn×mn×m的矩阵,其中包含字符′.′'.'′.′和′X′'X'′X′,你可以将任何′.′'.'′.′改成′X′'X'′X′,现在问你能否通过修改一些′.′'.'′.′来使′X′'X'′X′联通且不存在环。保证原本的′X′'X'′X′没有任何两个相邻。

思路: 既然我把最后一句话加粗了,那就肯定有用啦。 由于初始状态不会有任何两个相邻的,那么我们考虑一个mmm列的矩阵,先不需要考虑行,如果我从第一列开始,将这一列全部改成′X′'X'′X′,让后相邻两列间隔是两列,如下图:

因为题目保证了没有两个相邻,所以保证了第一列和第四列是不连通的,让后我们从中间两列找一行存在′X′'X'′X′的一行(都没有′X′'X'′X′就任取一行),把这行的两个格子全部都改成′X′'X'′X′即可,这样两边就联通了。当然这样只适合mmod3=1m\bmod 3=1mmod3=1和mmod3=2m\bmod 3=2mmod3=2的情况,对于mmod3=0m\bmod 3=0mmod3=0的情况,我们发现后面会多出来两列,所以我们只需要将原来1,4,7,..1,4,7,..1,4,7,..的位置改成2,5,8,...2,5,8,...2,5,8,...即可。
对于mmod3=2m\bmod3=2mmod3=2的情况,两种取法都可。

复杂度O(nm)O(nm)O(nm)

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=510,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m;
char s[N][N];int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);int _; scanf("%d",&_);while(_--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%s",s[i]+1);if(m%3==0||m%3==2){for(int i=2;i<=m;i+=3){for(int j=1;j<=n;j++) s[j][i]='X';if(i>2){int id=1;for(int j=1;j<=n;j++) if(s[j][i-1]=='X'||s[j][i-2]=='X') id=j;s[id][i-1]=s[id][i-2]='X';}}}else{for(int i=1;i<=m;i+=3){for(int j=1;j<=n;j++) s[j][i]='X';if(i>1){int id=1;for(int j=1;j<=n;j++) if(s[j][i-1]=='X'||s[j][i-2]=='X') id=j;s[id][i-1]=s[id][i-2]='X';}}}for(int i=1;i<=n;i++) printf("%s\n",s[i]+1);}return 0;
}
/**/

Codeforces Round #706 (Div. 2) E. Garden of the Sun 思维构造相关推荐

  1. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造

    传送门 文章目录 题意: 思路: 题意: 给你n,dn,dn,d,让你构造有nnn个点的二叉树,他们每个节点深度和为ddd. n,d≤3000n,d\le 3000n,d≤3000. 思路: 先考虑不 ...

  2. Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造

    传送门 题意: 给定一个矩阵aaa,让你构造一个矩阵bbb,要求矩阵bbb的每个元素是aaa对应位置元素的倍数,且矩阵bbb的每两个相邻元素相差为k4(k>=1)k^4(k>=1)k4(k ...

  3. Codeforces Round #706 (Div. 2)-A. Split it!-题解

    目录 Codeforces Round #706 (Div. 2)-A. Split it! Problem Description Input Output Sample Input Sample ...

  4. Codeforces Round #706 (Div. 2)B. Max and Mex

    Codeforces Round #706 (Div. 2)B. Max and Mex 题目 题目大意 刚开始给你n个不同的数,k次询问每次求在该序列中已存在的最大的数和不存在的最小的数(大于等于零 ...

  5. Codeforces Round #706 (Div. 2)-B. Max and Mex-题解

    目录 Codeforces Round #706 (Div. 2)-B. Max and Mex Problem Description Input Output Sample Input Sampl ...

  6. Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数初始方向是向右,每次可以交换相邻两个位置并且将这两个位置的方向调换,问这个序列的最终状态能否是非递减且方向都向右. n≤1e5,ai≤1 ...

  7. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维

    传送门 文章目录 题意: 思路: 题意: 有nnn个人,每个人都有一个能力值bib_ibi​以及他会的技能aia_iai​,当他会第xxx个技能的时候,aia_iai​的第xxx位是111.定义当xx ...

  8. Codeforces Round #727 (Div. 2) E. Game with Cards dp + 思维

    传送门 文章目录 题意: 思路: 题意: 初始有左右手,上面各有一个数字为000的卡牌,每次都有一个新卡kik_iki​,你可以将其放在左手或者右手,使两只手上的卡片范围在[ll,i,rl,i][l_ ...

  9. Codeforces Round #715 (Div. 1) C. Complete the MST 补图 + 思维 + 最小生成树

    传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm个边的图,mmm条边是给定的,要求你给未给定的边赋值一个边权,使得所有边权异或和为000,求所有满足这种情况的图中最小生成树边权和最小的 ...

最新文章

  1. 关于NLP相关技术全部在这里:预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...
  2. PostgreSQL9.6+新增空闲事务自动查杀功能
  3. 导出文件后打不开_PPT | 快速导出4K超高视频
  4. python怎么在图片上写字_Python在图片中添加文字的两种方法
  5. Adobe全系软件下载安装工具 CCMaker 1.3.6
  6. “渠道之王”2.0   百丽携手乐淘的背后
  7. 边境线 详解(C++)
  8. ESP8266(3)
  9. 实心和空心哪个抗弯能力强_为什么轮胎不设计成实心的?不怕爆胎 480阅读
  10. C++语法知识复习2(黑马程序员教程P109-p146)
  11. lammps后处理:Python调用Ovito模块配置方法
  12. linux apt 安装命令
  13. 2018深圳杯数学建模A题
  14. 太恶心了!百度员工在内网分享“日本AV女优链接” 遭开除后,还有脸上诉.........
  15. Linux上查找最大文件的 3 种方法
  16. 积分上限函数的导数例题 笔记
  17. android app银联支付,android app 快速接入银联支付流程(android studio版)
  18. pythonrefprop怎么设置_Refprop调用Excel设置步骤
  19. ThinkPHP5_无限极分类
  20. VLC WebPlugin中文

热门文章

  1. python单例模式继承_Python四种实现单例模式的方法
  2. 中国第一个发《Nature》的竟然是清朝人!被皇帝夸天下第一,他却觉得羞耻..........
  3. 最懂男人心的内裤,戳100个洞透气,超舒服
  4. 这个年纪,喜欢你的肉体还会送你包的,原来是......
  5. 从网恋到失恋只需要一秒...
  6. 如何用大数据找到男/女朋友?
  7. JAVA类思维_面向对象思维 Java中的类和对象及其应用
  8. getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用
  9. python 空指针_Python&CType空指针错误
  10. 计算机竞赛游戏探险岛,冒险岛2五大全新团本综合分析