题目地址: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. Maven 本地资源库配置

    Maven 本地资源库配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统环境 1>.查看操作系统环境(总共3台虚拟机) 2>.关闭防火墙并禁用开机自启动( ...

  2. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

  3. Hadoop记录-Linux Service

    [Unit] Description=Datanode After=syslog.target network.target auditd.service sshd.service datanode_ ...

  4. Vue项目搭建

    1.环境搭建 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 安装cnpm npm install -g cnpm --registry=https:// ...

  5. 委托(Delegate)简介

    1.什么是委托?是用来干什么的? 委托是一个类,它定义了方法的类型,使得可以将定义的方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Swit ...

  6. SpringBoot常用注解使用

    1.RequestBody和ResponseBody注解 @RequestMapping(“url”),这里的 url写的是请求路径的一部分,一般作用在 Controller的方法上,作为请求的映射地 ...

  7. C#下RSA算法的实现(适用于支付宝和易宝支付)

    RSA算法代码: using System; using System.Collections.Generic; using System.Text; using System.IO; using S ...

  8. Android五大布局

    原文地址:http://blog.51cto.com/liangruijun/632532 https://www.cnblogs.com/devinzhang/archive/2012/01/19/ ...

  9. springboot(二十):数据库连接池介绍

    概述 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 .hikariCP的高性能得益于最大限度的避免锁竞争. druid功能最为全面,sql ...

  10. redis整合Spring集群搭建及业务中的使用

    1.redis安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到li ...