原文链接https://www.cnblogs.com/zhouzhendong/p/CF1098B.html

题解

  首先,我们来证明一个结论:

  合法的矩阵要么满足每列只有两种字符,要么满足每行只有两种字符。

  然后直接枚举就好了。

  代码并不是那么好写。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL read(){
LL x=0;
char ch=getchar();
while (!isdigit(ch))
ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x;
}
const int N=300005;
const LL INF=1LL<<60;
int n,m;
char ch[4]={'A','C','G','T'};
int v[300],a[N],b[N],t[N],ans;
char s[N];
int &A(int i,int j){
return a[(i-1)*m+j];
}
int &B(int i,int j){
return b[(i-1)*m+j];
}
int &T(int i,int j){
return t[(i-1)*m+j];
}
int get(int c,int v1,int v2){
int c1=0,c2=0;
for (int i=1;i<=n;i++){
if (i&1){
c1+=A(i,c)!=v1;
c2+=A(i,c)!=v2;
}
else {
c1+=A(i,c)!=v2;
c2+=A(i,c)!=v1;
}
}
if (c1<=c2){
for (int i=1;i<=n;i++)
if (i&1)
T(i,c)=v1;
else
T(i,c)=v2;
return c1;
}
else {
for (int i=1;i<=n;i++)
if (i&1)
T(i,c)=v2;
else
T(i,c)=v1;
return c2;
}
}
int get2(int c,int v1,int v2){
int c1=0,c2=0;
for (int i=1;i<=m;i++){
if (i&1){
c1+=A(c,i)!=v1;
c2+=A(c,i)!=v2;
}
else {
c1+=A(c,i)!=v2;
c2+=A(c,i)!=v1;
}
}
if (c1<=c2){
for (int i=1;i<=m;i++)
if (i&1)
T(c,i)=v1;
else
T(c,i)=v2;
return c1;
}
else {
for (int i=1;i<=m;i++)
if (i&1)
T(c,i)=v2;
else
T(c,i)=v1;
return c2;
}
}
int main(){
v['A']=0,v['C']=1,v['G']=2,v['T']=3;
n=read(),m=read();
for (int i=1;i<=n;i++){
scanf("%s",s+1);
for (int j=1;j<=m;j++)
A(i,j)=v[s[j]];
}
ans=n*m;
for (int i=0;i<4;i++)
for (int j=i+1;j<4;j++){
int now=0;
int ii=-1,jj;
for (int k=0;k<4;k++)
if (k!=i&&k!=j)
if (!~ii)
ii=k;
else
jj=k;
for (int k=1;k<=m;k++)
if (k&1)
now+=get(k,i,j);
else
now+=get(k,ii,jj);
if (now<ans){
ans=now;
for (int i=1;i<=n*m;i++)
b[i]=t[i];
}
}
for (int i=0;i<4;i++)
for (int j=i+1;j<4;j++){
int now=0;
int ii=-1,jj;
for (int k=0;k<4;k++)
if (k!=i&&k!=j)
if (!~ii)
ii=k;
else
jj=k;
for (int k=1;k<=n;k++)
if (k&1)
now+=get2(k,i,j);
else
now+=get2(k,ii,jj);
if (now<ans){
ans=now;
for (int i=1;i<=n*m;i++)
b[i]=t[i];
}
}
for (int i=1;i<=n;i++,puts(""))
for (int j=1;j<=m;j++)
putchar(ch[B(i,j)]);
return 0;
}

  

Codeforces 1098B. Nice table 构造的更多相关文章

  1. Codeforces.226D.The table(构造)

    题目链接 \(Description\) 给定一个\(n\times m\)的矩阵\(A_{i,j}\),每次可以将一列或一行取负.求一个方案使得若干次操作后,每行每列的和都非负. \(n,m\leq ...

  2. Codeforces 417E Square Table(随机算法)

    题目链接:Codeforces 417E Square Table 题目大意:给出n和m.要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数. 解题思路:构造.依照 a a a b a a ...

  3. Codeforces Round #140 (Div. 1) D. The table 构造

    D. The table 题目连接: http://www.codeforces.com/contest/226/problem/D Description Harry Potter has a di ...

  4. CodeForces 1099E - Nice table - [好题]

    题目链接:https://codeforces.com/problemset/problem/1099/E You are given an $n×m$ table, consisting of ch ...

  5. Lua中的table构造式(table constructor)

    最简单的构造式就是一个空构造式{},用于创建一个空table. 构造式还可以用于初始化数组.例如,以下语句:days = {"Sunday", "Monday" ...

  6. Codeforces 1383D - Rearrange(构造)

    Codeforces 题面传送门 & 洛谷题面传送门 一道不算困难的构造,花了一节英语课把它搞出来了,题解简单写写吧( 考虑从大往小加数,显然第三个条件可以被翻译为,每次加入一个元素,如果它所 ...

  7. Codeforces 549B. Looksery Party[构造]

    B. Looksery Party time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. codeforces 582A. GCD Table 解题报告

    题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...

  9. codeforces 323A. Black-and-White Cube 构造

    输入n 1 <= n <= 100 有一个n * n * n 的立方体,由n ^ 3 个1 * 1 * 1 的单位立方体构成 要用white 和 black 2种颜色来染这n ^ 3个立方 ...

随机推荐

  1. 协方差(Covariance)

    统计学上用方差和标准差来度量数据的离散程度 ,但是方差和标准差是用来描述一维数据的(或者说是多维数据的一个维度),现实生活中我们常常会碰到多维数据,因此人们发明了协方差(covariance),用来度 ...

  2. Addrss already in user 解决方案 (linux)

    Addrss already  in user 解决方案 查pid netstat -lptu 查看当前用户的进程 pid kill -9 pid 杀进程 重复上面步骤一次, 因为一遍杀不死.他会换一 ...

  3. 「CF1154F」Shovels Shop【背包DP】

    题目链接 [洛谷传送门] 题解 非常简单的背包. \(f[i]\)表示购买\(i\)个物品所需要最少的花费. 不考虑免费的限制条件,那么一定是选择前\(k\)个双鞋子. 那么加入免费的条件,那么还是要 ...

  4. OpenFlow 交换机与控制器交互步骤

    1. Hello 控制器与交互及互相发送 Hello 消息.Hello消息中只包含有OpenFlow Header,其中的 type 字段为 OFPT_HELLO,version 字段为发送方所支持的 ...

  5. Java【第三篇】基本语法之--选择结构

    Java分支语句分类 分支语句根据一定的条件有选择地执行或跳过特定的语句,分为两类: if-else 语句 switch 语句 if-else语句语法格式 if(布尔表达式){ 语句或语句块; } i ...

  6. JSTL和EL的使用

    JSTL和EL的使用 使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL标签库 在JSTL中分为以下五个标签 核心标签 格 ...

  7. js的几大重点

    闭包,:作用域(函数创建),上下文环境(函数执行,会销毁) 匿名函数,:没有函数名的函数,function(){} 自执行函数,:立即调用的匿名函数,(function(){})() 原型链,:继承的 ...

  8. VS2012/2013/2015/Visual Studio 2017 关闭单击文件进行预览的功能

    Visual Studio在2010版本后推出了点击项目管理器预览文件的功能,但是对于配置不咋地的旧电脑总是觉得有点卡,下面是解决方案. 英文版方法:Tools->Options->Env ...

  9. Shiro 系列: 简单命令行程序示例

    在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. =======================Shiro INI 的基本规范================== ...

  10. [高中作文赏析]妈妈, 我心中的"灯"