Codeforces 1098B. Nice table 构造
原文链接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 构造的更多相关文章
- Codeforces.226D.The table(构造)
题目链接 \(Description\) 给定一个\(n\times m\)的矩阵\(A_{i,j}\),每次可以将一列或一行取负.求一个方案使得若干次操作后,每行每列的和都非负. \(n,m\leq ...
- Codeforces 417E Square Table(随机算法)
题目链接:Codeforces 417E Square Table 题目大意:给出n和m.要求给出一个矩阵,要求每一列每一行的元素的平方总和是一个平方数. 解题思路:构造.依照 a a a b a a ...
- 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 ...
- CodeForces 1099E - Nice table - [好题]
题目链接:https://codeforces.com/problemset/problem/1099/E You are given an $n×m$ table, consisting of ch ...
- Lua中的table构造式(table constructor)
最简单的构造式就是一个空构造式{},用于创建一个空table. 构造式还可以用于初始化数组.例如,以下语句:days = {"Sunday", "Monday" ...
- Codeforces 1383D - Rearrange(构造)
Codeforces 题面传送门 & 洛谷题面传送门 一道不算困难的构造,花了一节英语课把它搞出来了,题解简单写写吧( 考虑从大往小加数,显然第三个条件可以被翻译为,每次加入一个元素,如果它所 ...
- Codeforces 549B. Looksery Party[构造]
B. Looksery Party time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- codeforces 582A. GCD Table 解题报告
题目链接:http://codeforces.com/problemset/problem/582/A 网上很多题解,就不说了,直接贴代码= = 官方题解: http://codeforces.com ...
- codeforces 323A. Black-and-White Cube 构造
输入n 1 <= n <= 100 有一个n * n * n 的立方体,由n ^ 3 个1 * 1 * 1 的单位立方体构成 要用white 和 black 2种颜色来染这n ^ 3个立方 ...
随机推荐
- LOJ2340 [WC2018] 州区划分 【FMT】【欧拉回路】
题目分析: 这题是WC的题??? 令 $g[S] = (\sum_{x \in S}w_x)^p$ $h[S] = g[S]$如果$S$不是欧拉回路 $d[S] = \frac{f[S]}{g[All ...
- Django Cookie,Session
Cookie Cookie的由来 HTTP协议是无状态的,每次请求都是独立的,对服务器来说,每次的请求都是全新的,上一次的访问是数 据是无法保留到下一次的 某些场景需要状态数据或者中间数据等相关对下一 ...
- Flask websocket
websocket 概念 是一套协议,协议规定了: - 连接时需要握手 - 发送数据进行加密 - 连接之后不断开 意义 实现长轮询等操作 框架支持 - flask,gevent-websocket - ...
- [https]公司导入自签名证书实现https监控
https://www.v2ex.com/t/143012
- Vue+koa2开发一款全栈小程序(8.图书列表页)
1.图书列表页获取数据 1.在server/routes/index.js中新增路由 router.get('/booklist',controllers.booklist) 2.在server/co ...
- host-only局域网络
在网桥配置的情况下设置: 网桥配置链接 配置前: 配置后: vi /etc/sysconfig/network-scripts/ifcfg-eth0 这里是使用static静态配置,具体网络配置及声明 ...
- Docker:容器间互联的应用zabbix监控项目 [十]
一.docker容器间的互联 1.创建两个容器 [root@luoahong ~]# docker run -d --name luoahong httpd:latest 8f771f043391e7 ...
- css样式关键字(initial,inherit,unset,revert,all)
关键字 在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始).inherit(继承).unset(未设置).revert(还原).而all的取值只能是以上这4个关键字 ...
- .NET面试题系列(十六)数据库面试题
数据库事务的四大特性 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ...
- es6编程建议和技巧点汇总
大括号 特点:大括号(单独的大括号或者if等后的大括号)内是一个单独的作用域 注意点:在块级作用域内声明的函数,类似var,会被提升到大括号外,应避免在块级作用域内声明函数.如果确实需要,写成函数表达 ...