fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. ios::sync_with_stdio(false);
  6. cin.tie(nullptr);
  7.  
  8. int N;
  9. cin >> N;
  10. string SS, SK, SH;
  11. cin >> SS >> SK >> SH;
  12.  
  13. string ans(N, 'a');
  14. int scoreS = 0, scoreK = 0, scoreH = 0;
  15.  
  16. // 우선: 숭돌이와 고돌이 점수를 구분 짓는 게 관건
  17. for (int i = 0; i < N; i++) {
  18. // 셋 다 같은 경우: 맞추면 전원 +1 → 절대 불가능, 따라서 다른 글자
  19. if (SS[i] == SK[i] && SK[i] == SH[i]) {
  20. ans[i] = (SS[i] == 'a' ? 'b' : 'a');
  21. continue;
  22. }
  23.  
  24. // 숭돌이와 한돌이가 같으면: 숭돌이 답을 고르면 H도 같이 득점 → 위험
  25. // 차라리 고돌이 답을 주자 (S 고정이 불리할 수 있음)
  26. if (SS[i] == SH[i] && SS[i] != SK[i]) {
  27. ans[i] = SK[i];
  28. continue;
  29. }
  30.  
  31. // 고돌이와 한돌이가 같으면: 고+한 같이 득점하면 K>H 안 만들어짐
  32. // 숭돌이 답을 선택
  33. if (SK[i] == SH[i] && SS[i] != SK[i]) {
  34. ans[i] = SS[i];
  35. continue;
  36. }
  37.  
  38. // 숭돌이와 고돌이가 같으면: S=K 동점 → 조심
  39. // 그냥 틀리게 해서 분리
  40. if (SS[i] == SK[i] && SS[i] != SH[i]) {
  41. ans[i] = (SS[i] == 'a' ? 'b' : 'a');
  42. continue;
  43. }
  44.  
  45. // 셋 다 다르면 숭돌이 답 선택
  46. ans[i] = SS[i];
  47. }
  48.  
  49. // 점수 계산
  50. auto calc = [&](string &A) {
  51. int s=0,k=0,h=0;
  52. for (int i=0;i<N;i++) {
  53. if (A[i]==SS[i]) s++;
  54. if (A[i]==SK[i]) k++;
  55. if (A[i]==SH[i]) h++;
  56. }
  57. return tuple<int,int,int>(s,k,h);
  58. };
  59. tie(scoreS,scoreK,scoreH) = calc(ans);
  60.  
  61. // 만약 조건 불만족이면, 일부 자리 바꿔서 조정
  62. if (!(scoreS > scoreK && scoreK > scoreH)) {
  63. for (int i = 0; i < N; i++) {
  64. char old = ans[i];
  65. int oldS = (old == SS[i]);
  66. int oldK = (old == SK[i]);
  67. int oldH = (old == SH[i]);
  68.  
  69. for (char c : {SS[i], SK[i], SH[i], 'a'}) {
  70. if (c == old) continue;
  71. int newS = scoreS - oldS + (c == SS[i]);
  72. int newK = scoreK - oldK + (c == SK[i]);
  73. int newH = scoreH - oldH + (c == SH[i]);
  74. if (newS > newK && newK > newH) {
  75. ans[i] = c;
  76. scoreS = newS;
  77. scoreK = newK;
  78. scoreH = newH;
  79. goto done;
  80. }
  81. }
  82. }
  83. }
  84. done:;
  85.  
  86. if (scoreS > scoreK && scoreK > scoreH) {
  87. cout << ans << "\n";
  88. } else {
  89. cout << -1 << "\n";
  90. }
  91. }
Success #stdin #stdout 0.01s 5328KB
stdin
5
aaaaa
aaaab
aaaac
stdout
-1