fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int N;
  5. string SS, SK, SH;
  6. string ans;
  7.  
  8. int main(){
  9. ios::sync_with_stdio(false);
  10. cin.tie(nullptr);
  11.  
  12. cin >> N >> SS >> SK >> SH;
  13. ans.resize(N);
  14.  
  15. int s=0,k=0,h=0;
  16.  
  17. for(int i=0;i<N;i++){
  18. if(SS[i]==SK[i] && SK[i]==SH[i]){
  19. // 셋 다 같으면 점수 줄 수 없음 → 틀리게
  20. char c='a';
  21. if(c==SS[i]) c='b';
  22. ans[i]=c;
  23. }
  24. else if(SS[i]==SK[i] && SK[i]!=SH[i]){
  25. // (S,K)
  26. ans[i]=SS[i]; // S,K 점수
  27. s++; k++;
  28. }
  29. else if(SS[i]==SH[i] && SK[i]!=SS[i]){
  30. // (S,H)
  31. ans[i]=SS[i]; // 기본은 S,H 점수
  32. s++; h++;
  33. }
  34. else if(SK[i]==SH[i] && SS[i]!=SK[i]){
  35. // (K,H)
  36. ans[i]=SS[i]; // S 점수만
  37. s++;
  38. }
  39. else{
  40. // all different
  41. ans[i]=SS[i];
  42. s++;
  43. }
  44. }
  45.  
  46. // 현재 점수 (s,k,h)
  47. if(s>k && k>h){
  48. cout << ans << "\n";
  49. return 0;
  50. }
  51.  
  52. // 조정 단계
  53. // K < H 이면 K를 늘리거나 H를 줄여야 함
  54. for(int i=0;i<N && !(s>k && k>h);i++){
  55. char best=ans[i];
  56. int oldS=(ans[i]==SS[i]);
  57. int oldK=(ans[i]==SK[i]);
  58. int oldH=(ans[i]==SH[i]);
  59. int bestS=s, bestK=k, bestH=h;
  60. for(char c : {SS[i], SK[i], SH[i], 'a'}){
  61. int ns=s-oldS+(c==SS[i]);
  62. int nk=k-oldK+(c==SK[i]);
  63. int nh=h-oldH+(c==SH[i]);
  64. if(ns>nk && nk>nh){
  65. ans[i]=c;
  66. s=ns; k=nk; h=nh;
  67. break;
  68. }
  69. }
  70. }
  71.  
  72. if(s>k && k>h) cout << ans << "\n";
  73. else cout << -1 << "\n";
  74. }
Success #stdin #stdout 0.01s 5324KB
stdin
5
abcde
efgtb
abgte
stdout
-1