当前位置:   article > 正文

Codeforces Round 850 (Div. 2) D. Letter Exchange

Codeforces Round 850 (Div. 2) D. Letter Exchange

题目

思路

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define pb push_back
  5. #define fi first
  6. #define se second
  7. #define lson p << 1
  8. #define rson p << 1 | 1
  9. const int maxn = 1e6 + 5, inf = 1e9, maxm = 4e4 + 5;
  10. const int N = 1e6;
  11. // const int mod = 1e9 + 7;
  12. const int mod = 998244353;
  13. // int a[505][5005];
  14. // bool vis[505][505];
  15. // char s[505][505];
  16. int a[maxn], b[maxn];
  17. int vis[maxn];
  18. string s;
  19. int n, m;
  20. struct Node{
  21. int val, id;
  22. bool operator<(const Node &u)const{
  23. return val < u.val;
  24. }
  25. };
  26. // Node c[maxn];
  27. int ans[maxn];
  28. int pre[maxn];
  29. //long long ? maxn ?
  30. char change(char ch){
  31. if(ch == 'w') return 'a';
  32. if(ch == 'i') return 'b';
  33. return 'c';
  34. }
  35. char rechange(int id){
  36. if(id == 0) return 'w';
  37. if(id == 1) return 'i';
  38. return 'n';
  39. }
  40. void solve(){
  41. int res = 0;
  42. int q, k;
  43. int sum = 0;
  44. int mx = 0;
  45. cin >> n;
  46. // for(int i = 1; i <= n; i++){
  47. // cin >> a[i];
  48. // }
  49. vector<int> vec[3][3];
  50. for(int i = 1; i <= n; i++){
  51. string s;
  52. cin >> s;
  53. int cnt[3] = {0};
  54. int tot = 0;
  55. for(int j = 0; j < 3; j++){
  56. s[j] = change(s[j]);
  57. char ch = s[j];
  58. if(!cnt[ch - 'a']){
  59. tot++;
  60. }
  61. cnt[ch - 'a']++;
  62. }
  63. if(tot == 3) continue;
  64. if(tot == 1){
  65. int id = s[0] - 'a';
  66. for(int j = 0; j < 3; j++){
  67. if(j != id){
  68. vec[id][j].pb(i);
  69. // cout << i << ' ' << id << ' ' << j << '\n';
  70. }
  71. }
  72. }
  73. else{
  74. int more, less;
  75. for(int j = 0; j < 3; j++){
  76. if(cnt[j] == 2){
  77. more = j;
  78. }
  79. else if(!cnt[j]){
  80. less = j;
  81. }
  82. }
  83. vec[more][less].pb(i);
  84. }
  85. // cout << i << ' ' << tot << '\n';
  86. }
  87. vector<array<int, 4>> ans;
  88. for(int i = 0; i < 3; i++){
  89. int j = (i + 1) % 3;
  90. // cout << i << ' ' << j << ":\n";
  91. // for(auto x : vec[i][j]){
  92. // cout << x << ' ';
  93. // }
  94. // cout << '\n';
  95. // cout << j << ' ' << i << ":\n";
  96. // for(auto x : vec[j][i]){
  97. // cout << x << ' ';
  98. // }
  99. // cout << '\n';
  100. while(!vec[i][j].empty() && !vec[j][i].empty()){
  101. int x = vec[i][j].back(), y = vec[j][i].back();
  102. vec[i][j].pop_back();
  103. vec[j][i].pop_back();
  104. // cout << x << ' ' << rechange(i) << ' ' << y << rechange(j) << '\n';
  105. ans.pb({x, rechange(i), y, rechange(j)});
  106. }
  107. }
  108. while(!vec[0][1].empty()){
  109. int i = vec[0][1].back(), j = vec[1][2].back(), k = vec[2][0].back();
  110. vec[0][1].pop_back();
  111. vec[1][2].pop_back();
  112. vec[2][0].pop_back();
  113. ans.pb({i, rechange(0), j, rechange(1)});
  114. ans.pb({j, rechange(0), k, rechange(2)});
  115. }
  116. while(!vec[0][2].empty()){
  117. int i = vec[0][2].back(), j = vec[2][1].back(), k = vec[1][0].back();
  118. vec[0][2].pop_back();
  119. vec[2][1].pop_back();
  120. vec[1][0].pop_back();
  121. ans.pb({i, rechange(0), j, rechange(2)});
  122. ans.pb({j, rechange(0), k, rechange(1)});
  123. }
  124. cout << ans.size() << '\n';
  125. for(auto [x, c1, y, c2] : ans){
  126. cout << x << ' ' << char(c1) << ' ' << y << ' ' << char(c2) << '\n';
  127. }
  128. }
  129. signed main(){
  130. ios::sync_with_stdio(0);
  131. cin.tie(0);
  132. int T = 1;
  133. cin >> T;
  134. while (T--)
  135. {
  136. solve();
  137. }
  138. return 0;
  139. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号