原文链接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. HBase轻松入门之HBase架构图解析

    2018-12-13 2018-12-20 本篇文章旨在针对初学者以我本人现阶段所掌握的知识就HBase的架构图中各模块作一个概念科普.不对文章内容的“绝对.完全正确性”负责. 1.开胃小菜 关于HB ...

  2. 【JVM】JVM垃圾收集器、垃圾收集算法、无用对象

    Java 常见的垃圾收集器有哪些 实际上,垃圾收集器(GC,Garbage Collector)是和具体 JVM 实现紧密相关的,不同厂商(IBM.Oracle),不同版本的JVM,提供的选择也不同. ...

  3. 20165223 《信息安全系统设计基础》 实现mybash

    一.了解 mybash 1. 简介   bash 是 Bourne Again Shell 的缩写,是linux默认的标准shell(也是大家常说的系统内核),bash也是Unix/Linux上常见的 ...

  4. Hack The Box 获取邀请码

    TL DR; 使用curl请求下面的地址 curl -X POST https://www.hackthebox.eu/api/invite/generate {"success" ...

  5. 为什么会有这么多python?其实python并不是编程语言!

    Python是出类拔萃的 然而,这是一句非常模棱两可的话.这里的"Python"到底指的是什么? 是Python的抽象接口吗?是Python的通用实现CPython吗(不要把CPy ...

  6. ubuntu不能联网的问题

    控制面板\网络和 Internet\网络和共享中心-->更改>配器设置-->以太网-->右键属性-->共享-->允许其他网络用户通过此计算机的internet连接来 ...

  7. Springboot 3.需求携带参数的get请求

    还是拿来上节讲的代码: package com.course.server; import org.springframework.web.bind.annotation.*; import java ...

  8. CentOS配置防火墙操作实例

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status<回 ...

  9. elk插件以及分词器安装

    ElasticSearch-Head 安装配置因为安装 ElasticSearch-Head 需要使用到 npm 包管理器,所以需要我们提前安装好 NodeJS ,安装 NodeJS 的方法可以参考: ...

  10. 应用调试(五)侵入式SWI

    目录 应用调试(五)侵入式SWI 场景应用 测试程序 修改APP的bin 修改SWI 获得当前进程的寄存器 测试运行 恢复代码 进程间内存拷贝 TODO 更多参考文献 title: 应用调试(五)侵入 ...