题目地址:CF1098B/CF1099E Nice table

显然,a nice table需要满足如下条件:

要么,每行都由两个字符交替组成,相邻两行的字符均不相同

要么,每列都由两个字符交替组成,相邻两列的字符均不相同

然后枚举就完事啦

代码:

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const string str = "ATGC";
vector<string> s, tmp, ans;

int main() {
    ios::sync_with_stdio(0);
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        string st;
        cin >> st;
        s.push_back(st);
    }
    int ansmin = INF, now;
    for (int c1 = 0; c1 < 4; c1++)
        for (int c2 = c1 + 1; c2 < 4; c2++) {
            string t;
            set<int> st;
            for (int i = 0; i < 4; i++) st.insert(i);
            st.erase(c1);
            st.erase(c2);
            set<int>::iterator it = st.begin();
            t.push_back(str[c1]);
            t.push_back(str[c2]);
            t.push_back(str[*(it++)]);
            t.push_back(str[*it]);
            now = 0;
            tmp.clear();
            for (int i = 0; i < n; i++) {
                tmp.push_back("");
                int b = (i & 1) << 1;
                int cnt1 = 0, cnt2 = 0;
                for (int j = 0; j < m; j++) {
                    if (s[i][j] != t[b+(j&1)]) ++cnt1;
                    if (s[i][j] != t[b+((j&1)^1)]) ++cnt2;
                }
                if (cnt1 < cnt2)
                    for (int j = 0; j < m; j++)
                        tmp[i].push_back(t[b+(j&1)]);
                else
                    for (int j = 0; j < m; j++)
                        tmp[i].push_back(t[b+((j&1)^1)]);
                now += min(cnt1, cnt2);
            }
            if (now < ansmin) {
                ans = tmp;
                ansmin = now;
            }
            now = 0;
            tmp.clear();
            for (int i = 0; i < n; i++) tmp.push_back("");
            for (int j = 0; j < m; j++) {
                int b = (j & 1) << 1;
                int cnt1 = 0, cnt2 = 0;
                for (int i = 0; i < n; i++) {
                    if (s[i][j] != t[b+(i&1)]) ++cnt1;
                    if (s[i][j] != t[b+((i&1)^1)]) ++cnt2;
                }
                if (cnt1 < cnt2)
                    for (int i = 0; i < n; i++)
                        tmp[i].push_back(t[b+(i&1)]);
                else
                    for (int i = 0; i < n; i++)
                        tmp[i].push_back(t[b+((i&1)^1)]);
                now += min(cnt1, cnt2);
            }
            if (now < ansmin) {
                ans = tmp;
                ansmin = now;
            }
        }
    for (int i = 0; i < n; i++) cout << ans[i] << endl;
    return 0;
}

CF1098B/CF1099E Nice table的更多相关文章

  1. FCKeditor使用方法技术详解

    转载自 http://www.cnblogs.com/cchyao/archive/2010/07/01/1769204.html 1.概述 FCKeditor是目前最优秀的可见即可得网页编辑器之一, ...

  2. mysql slow query---pt-query-digest----db structure consistency,monitor table records before and after transaction.

    将数据库脚本纳入版本管理是很必要的,尤其对于需要在客户那里部署升级的系统. 对于Python Django等框架,由于数据库是通过Model生成的,因此框架本身包括数据库升级工具,并通过代码版本间接管 ...

  3. 学习mongo系列(一) win/mac安装 解析 连接

    一.安装mongo数据库 下载链接https://www.mongodb.org/downloads, 在执行如下命令的时候事先按照目录新建如下的目录:(如果数据库安装在D盘就在D盘的根目录下建)&q ...

  4. SAP接口编程 之 JCo3.0系列(03) : Table参数

    Table参数作为export parameter BAPI_COMPANYCODE_GETDETAIL是一个适合演示的函数,没有import paramter参数,调用后COMPANYCODE_GE ...

  5. 在iOS中怎样创建可展开的Table View?(下)

    接上篇:在iOS中怎样创建可展开的Table View?(上) 展开和合拢 我猜这部分可能是你最期望的了,因为本次教程的目标将会在在部分实现.第一次我们设法让顶层的cell,在它们点击的时候展开或者合 ...

  6. 在iOS中怎样创建可展开的Table View?(上)

    原文地址 本文作者:gabriel theodoropoulos 原文:How To Create an Expandable Table View in iOS 原文链接 几乎所有的app都有一个共 ...

  7. Html table 实现Excel多格粘贴

    Html table 实现Excel多格粘贴 电商网站的后台总少不了各种繁杂数据的录入,旁边的运营妹子录完第138条商品的时候,终于忍不住转身吼到:为什么后台的录入表不能像Excel那样多行粘贴!!! ...

  8. iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)

     iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action)   今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Fou ...

  9. css控制div显示/隐藏方法及2种方法比较原码 - czf164的专栏 - 博客频道 - CSDN.NET

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. plsql界面/command界面

    存储过程执行CALL PRO_DELETE_OND_FOR_ORDERNO('120000000208');    --在PLSQL的SQL窗口执行 EXEC PRO_DELETE_OND_FOR_O ...

  2. 转载:C++ 二维数组new

    来源:http://developer.51cto.com/art/201002/183127.htm C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一 ...

  3. Mesos初体验-Mesos优势

    一.Mesos优势 1.Mesos的核心是分布式集群资源分配,不负责任务调度,因而Mesos可以和其他集群协同工作 2.Mesos主要实现了分布式集群的管理系统中的资源分配功能,其他功能主要靠额外的组 ...

  4. Tensorflow object detection API 搭建物体识别模型(四)

    四.模型测试 1)下载文件 在已经阅读并且实践过前3篇文章的情况下,读者会有一些文件夹.因为每个读者的实际操作不同,则文件夹中的内容不同.为了保持本篇文章的独立性,制作了可以独立运行的文件夹目标检测. ...

  5. Spring Boot笔记四:日志框架介绍

    我是一名程序员,我喜欢写System.out.println来打印一些重要的信息...后来我学了面向对象,我把这些输出语句整合到了一个工具类里面,可以打印,也可以保存日志. 我是一名积极思考的程序员, ...

  6. STM32学习笔记:【003】GPIO

    版本:STM32F429 Hal库v1.10 在STM32中,最常用到的功能莫过于GPIO(General Purpose Input Output .通用输入/输出)了,在STM32中,除了除去AD ...

  7. shop++改造之Filter类

    基于shop++源码进行商城改造.本来想大展手脚,结果一入手.发觉瞬间淹没了我的才华,sql语句也得贼溜没啥用. 不得不说这个商城源码价值很高,封装的很精屁. 下面是我第一天入手的坑. 数据库建好了表 ...

  8. Docker 从入门到放弃(四)Docker+Jenkins_自动化持续集成

    Windows 查看密码 $ cat /var/jenkins_home/secrets/initialAdminPassword 14e14c414f41481aa5955753d3f31f9f 自 ...

  9. zookeeper的Java端API应用

    1. 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话.它提供了表1所示几类主要方法: 功能 描述 create 在本地目录树中创建 ...

  10. HashMap 集合的遍历

    HashMap 集合的遍历: 两种方式遍历HashMap: //集合hashMap的遍历: //方式一: @Test public void testMethod1(){ HashMap<Str ...