// Created by Michal Kowalski on 07/12/2021. // #include <iostream> #include <vector> int N; char S[8*100000+10]; std::vector<int> find3456(int n1, int N) { int mod = n1 % 3; int n3 = (int)(n1 / 3); int n4 = 0; int n5 = 0; int n6 = 0; if (mod == 1 && n3 > 0) { // add 4 ++n4; --n3; } else if (mod == 2 && n3 > 0) { // add 5 ++n5; --n3; } int sum = n3 + n4 + n5 + n6; if (sum == N) { return {n3,n4,n5,n6}; } else if (N > sum) { return {}; } else { int diff = sum - N; int minus3 = diff * 2; if (minus3 > n3) return {}; else { n3 -= minus3; n6 += diff; } /// search return {n3, n4, n5, n6}; } } void print3456(std::vector<int> v) { if (v.size() == 0) { printf("NIE\n"); return; } // 3 => a for (int i=0;i<v[0];++i) printf("a"); // 4 => c for (int i=0;i<v[1];++i) printf("c"); // 5 => g for (int i=0;i<v[2];++i) printf("g"); // 6 => o for (int i=0;i<v[3];++i) printf("o"); printf("\n"); } int main() { scanf("%d",&N); scanf("%s",S); int n1 = 0; for (int i=0;i<8*N;++i) { if (S[i]== '1') ++n1; } std::vector v = find3456(n1, N); print3456(v); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | // Created by Michal Kowalski on 07/12/2021. // #include <iostream> #include <vector> int N; char S[8*100000+10]; std::vector<int> find3456(int n1, int N) { int mod = n1 % 3; int n3 = (int)(n1 / 3); int n4 = 0; int n5 = 0; int n6 = 0; if (mod == 1 && n3 > 0) { // add 4 ++n4; --n3; } else if (mod == 2 && n3 > 0) { // add 5 ++n5; --n3; } int sum = n3 + n4 + n5 + n6; if (sum == N) { return {n3,n4,n5,n6}; } else if (N > sum) { return {}; } else { int diff = sum - N; int minus3 = diff * 2; if (minus3 > n3) return {}; else { n3 -= minus3; n6 += diff; } /// search return {n3, n4, n5, n6}; } } void print3456(std::vector<int> v) { if (v.size() == 0) { printf("NIE\n"); return; } // 3 => a for (int i=0;i<v[0];++i) printf("a"); // 4 => c for (int i=0;i<v[1];++i) printf("c"); // 5 => g for (int i=0;i<v[2];++i) printf("g"); // 6 => o for (int i=0;i<v[3];++i) printf("o"); printf("\n"); } int main() { scanf("%d",&N); scanf("%s",S); int n1 = 0; for (int i=0;i<8*N;++i) { if (S[i]== '1') ++n1; } std::vector v = find3456(n1, N); print3456(v); return 0; } |