题面

题目要求不能有有三个连续相同的'X'或'O',注意到这样的连续串它们的横纵坐标之和是连续变化的,考虑将它们按照横纵坐标之和对 \(3\)的模值分组,因为这样分组后相邻的三个相同字符就被分到了三个不同的组中,这样可以通过将其中一个组的字符所在位置全部变为其他字符,这样就保证没有三个连续相同字符了,那么我们分别从'X'和'O'中选出一组转化为其他字符就可以保证满足没有三个连续相同字符了。但是考虑这样的情况: \(\begin{matrix}.X. \\ OOO \\ .X.\end{matrix}\),假定中间那个'O'的横纵坐标和对 \(3\)的模值是 \(2\),这时如果'O'选的组和'X'选的组都都是模值为 \(2\)的,那么最终就会变成这样:\(\begin{matrix}.X. \\ OXO \\ .X.\end{matrix}\),明显不满足,原因在于虽然没有连续三个'O'了,但却造成了连续三个'X',而且由于这是后天造成的,之前的分组对这个新形成的'X'不起作用,导致前面的做法假了。为了避免这种情况,我们只需从'X'和 'O'中选出模数不同的两组即可。证明:假定从'X'中选出了横纵坐标和模 \(3\)为 \(1\)的组,从'O'中选出了模为 \(2\)的组,这样新产生的'X'或'O'都不会再形成新的 \(3\)连续相同字符序列。举个例子,坐标为 \((2,2)\)的'X'变成了'O',它的坐标和对 \(3\)取模是 \(1\),也就是从 'X'选的组的模值是 \(1\),那么从'O'中选的组的模值要么是 \(0\)要么是 \(2\),而一个 \(3\)连续序列必然同时包含模值为 \(0,1,2\)的点,现在缺失了 \(0\)或 \(2\)故不可能产生新的连续序列。证毕。然后为了满足题目操作限制的要求,我们需要选择两个组满足这两个组包含的点数最少。

#include<cstdio>
#include<cstring> int T, n;
int X[5], O[5];
char s[305][305]; int main(){
scanf("%d", &T);
while(T--){
scanf("%d", &n);
memset(X, 0, sizeof(X));
memset(O, 0, sizeof(O));
for(int i = 1; i <= n; ++i) scanf("%s", s[i] + 1);
for(int i = 1; i <= n; ++i)
for(int t = 1; t <= n; ++t){
if(s[i][t] == 'X') ++X[(i + t) % 3];
if(s[i][t] == 'O') ++O[(i + t) % 3];
}
int minn = 1e9, j, k;
for(int i = 0; i < 3; ++i)
for(int t = 0; t < 3; ++t)
if(i != t && X[i] + O[t] < minn){
minn = X[i] + O[t];
j = i, k = t;
}
for(int i = 1; i <= n; ++i)
for(int t = 1; t <= n; ++t){
if(s[i][t] == 'X' && (i + t) % 3 == j) s[i][t] = 'O';
if(s[i][t] == 'O' && (i + t) % 3 == k) s[i][t] = 'X';
}
for(int i = 1; i <= n; ++i) puts(s[i] + 1);
}
return 0;
}

【Codeforces Global Round 12】 C2 - Errich-Tac-Toe题解(思维)的更多相关文章

  1. Codeforces Global Round 12 D. Rating Compression (思维,双指针)

    题意:给你一长度为\(n\)的数组,有一长度为\(k\ (1\le k \le n)\)的区间不断从左往右扫过这个数组,总共扫\(n\)次,每次扫的区间长度\(k=i\),在扫的过程中,每次取当前区间 ...

  2. C. Meaningless Operations Codeforces Global Round 1 异或与运算,思维题

    C. Meaningless Operations time limit per test 1 second memory limit per test 256 megabytes input sta ...

  3. Codeforces Global Round 2 E. Pavel and Triangles(思维+DP)

    题目链接:https://codeforces.com/contest/1119/problem/E 题意:有n种长度的棍子,有a_i根2^i长度的棍子,问最多可以组成多少个三角形 题解:dp[i]表 ...

  4. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  5. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  6. Codeforces Beta Round #12 (Div 2 Only)

    Codeforces Beta Round #12 (Div 2 Only) http://codeforces.com/contest/12 A 水题 #include<bits/stdc++ ...

  7. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  8. Codeforces Global Round 1 (A-E题解)

    Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...

  9. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  10. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

随机推荐

  1. 去中心化组件共享方案 —— Webpack Module Federation(模块联邦)

    在大型应用中, 我们可能会对其进行拆分,分成容器.主应用和多个子应用,使拆分后的应用独立开发与部署,更加容易维护.但无论是微应用.公共模块应用,都需要放到容器中才能使用. 如果多个应用之间希望资源共享 ...

  2. 理解linux的CPU上下文切换

    前言 linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行.当然,这个同时运行不是真的同时运行,而是系统在很短的时间内轮流分配CPU资源,由于CPU的速度很快,所以给人一种同时运行的错 ...

  3. 从零开始实现放置游戏(十七)——完结篇(附DEMO地址)

    大家好,时隔2年多,我来填坑啦! 之前用的技术.设计思路都不成熟,所以直接干掉重做了. 由于从头教学实在太啰嗦,精力也有限,咱们还是直接上源码吧. DEMO地址: http://212.129.154 ...

  4. 数仓备份经验分享丨详解roach备份原理及问题处理套路

    本文分享自华为云社区<GaussDB(DWS) 备份问题定位思路>,作者: yd_216390446. 前言 在数据库系统中,故障分为事务内部故障.系统故障.介质(磁盘)故障.对于事务内部 ...

  5. 9、Mybatis之动态SQL

    9.1.环境搭建 9.1.1.创建新module 创建名为mybatis_dynamicSQL的新module,过程参考5.1节 9.1.2.创建Emp实体类 package org.rain.myb ...

  6. 安卓APK加固工具 如何进行实名认证购买和激活

    安卓APK资源混淆加密重签名工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × ...

  7. 在Vue2和Vue3中JSX的使用集锦

    Vue2安装JSX支持 有时候,我们使用渲染函数(render function)来抽象组件,而渲染函数使用Vue的h函数来编写Dom元素相对template语法差别较大,体验不佳,这个时候就派 JS ...

  8. Quantitative Relationship Induction

    数量关系是指事物之间的数值或数量之间的相互关系(+.-.*./). 数量关系描述各种量的变化和相互关系.数量关系可以包括数值的比较.增减.比例.百分比.平均值等方面. 在数学中,数量关系可以通过代数方 ...

  9. stat函数详解

    Linux系统函数之文件系统管理 stat函数 作用:获取文件信息 include <sys/types.h> #include <sys/stat.h> #include & ...

  10. 虹科技术|Redis企业版数据库:实现金融服务IT现代化!

    随着新冠肺炎和技术创新推动企业进入新的数字时代,金融行业客户现在需要一种快速.简单且根据需求量身定制的数字银行体验.这就需要银行进行转型,以提供更加数字化的服务,但无论战略.方法,还是满足消费者极高期 ...