Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int n,m, bes = MOD;
- string t[300000], ans[300000], tmp[300000];
- string z = "ACGT";
- string gen(vi v, int m) {
- string Z;
- F0R(i,m) Z += z[v[i&1]];
- return Z;
- }
- int dif(string a, string b) {
- int d = 0;
- F0R(i,sz(a)) if (a[i] != b[i]) d ++;
- return d;
- }
- void tri(int a, int b) {
- vi v[2];
- v[0] = {a,b};
- F0R(i,4) if (find(all(v[0]),i) == v[0].end()) v[1].pb(i);
- int cur = 0;
- F0R(i,n) {
- int x = dif(gen(v[i&1],m),t[i]);
- auto V = v[i&1]; swap(V[0],V[1]);
- int y = dif(gen(V,m),t[i]);
- if (x < y) {
- cur += x;
- tmp[i] = gen(v[i&1],m);
- } else {
- cur += y;
- tmp[i] = gen(V,m);
- }
- }
- if (cur < bes) {
- bes = cur;
- F0R(i,n) ans[i] = tmp[i];
- }
- }
- void tri2(int a, int b) {
- vi v[2];
- v[0] = {a,b};
- F0R(i,4) if (find(all(v[0]),i) == v[0].end()) v[1].pb(i);
- int cur = 0;
- F0R(i,m) {
- string tt; F0R(j,n) tt += t[j][i];
- int x = dif(gen(v[i&1],n),tt);
- auto V = v[i&1]; swap(V[0],V[1]);
- int y = dif(gen(V,n),tt);
- if (x < y) {
- cur += x;
- string zz = gen(v[i&1],n);
- F0R(j,n) tmp[j][i] = zz[j];
- } else {
- cur += y;
- string zz = gen(V,n);
- F0R(j,n) tmp[j][i] = zz[j];
- }
- }
- /*pr("AH",v[0],cur);
- F0R(i,n) pr(tmp[i]);
- pr("");*/
- if (cur < bes) {
- bes = cur;
- F0R(i,n) ans[i] = tmp[i];
- }
- }
- int main() {
- // you should actually read the stuff at the bottom
- setIO(); re(n,m);
- F0R(i,n) re(t[i]);
- F0R(i,4) FOR(j,i+1,4) {
- tri(i,j);
- tri2(i,j);
- }
- F0R(i,n) pr(ans[i]);
- // pr(bes);
- // you should actually read the stuff at the bottom
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement