题目地址: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. IIS 错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    导致这种问题的原因是ASP.NET没有成功注册到IIS中,很有可能是先安装.Net Framework,然后安装IIS.为了避免此问题发生,要先安装IIS再安装.Net Framework. 解决方案 ...

  2. java将long数据转为int类型的方法

    二.调用intValue()方法 [java] long ll = 300000; int ii= new Long(ll).intValue(); 三.先把long转换成字符串String,然后在转 ...

  3. POJ1821 单调队列//ST表 优化dp

    http://poj.org/problem?id=1821 当我们在考虑内层循环j以及决策k的时候,我们可以把外层变量i看作定值,以此来优化dp状态转移方程. 题意 有n个工人准备铺m个连续的墙,每 ...

  4. springboot学习笔记-5 springboot整合shiro

    shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和sh ...

  5. python 函数基础及装饰器

    没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2&qu ...

  6. `&nbsp;` `&emsp;` `&ensp;` `&thinsp;`

    字符实体 说明   这是我们使用最多的空格,也就是按下space键产生的空格.在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个).要使用html实体表示才可累加.   占据的宽度正好 ...

  7. 转--select/poll/epoll到底是什么一回事

    面试题:说说select/poll/epoll的区别. 这是面试后台开发时的高频面试题,属于网络编程和IO那一块的知识.Android里面的Handler消息处理机制的底层实现就用到了epoll. 为 ...

  8. ArcGis Python脚本——批量删除字段

    注意,ArcGis中shp属性表至少要保留除OID(FID).Shape之外的1个字段. 例:批量删除“省级行政区域”除“FID”.“Shape”.“Area”之外的字段. import arcpy ...

  9. Mac 下搭建环境 homebrew/git/node.js/npm/vsCode...

    主要记录一下 homebrew/git/node.js/npm/mysql 的命令行安装 1. 首先安装 homebrew  也是一个包管理工具: mac 里打开终端命令行工具,粘下面一行回车安装br ...

  10. html5 area实例

    真实页面效果:就是一张图 html代码: <!DOCTYPE HTML> <html> <style> body{ padding:0px; margin:0px; ...