Hướng dẫn giải của Bedao Regular Contest 12 - 3M0J1


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Tác giả: bedao

Từ đề bài, ta có thể thấy: một số emoji sẽ có kí tự đặc biệt (chỉ emoji đó có, không bị trùng với emoji nào khác). Vì vậy, ta sẽ xét các emoji đó trước, và thực hiện đến khi không còn kí tự đặc biệt nào.

Độ phức tạp: ~O(n)~ với ~n~ là độ dài của xâu kí tự ban đầu.

Code mẫu

#include <bits/stdc++.h>
#define VanLoi ""
#define gb(i, j) ((i >> j) & 1)

using namespace std;

const int N = 100005, MOD = 1000000007;

int n, a[200];
string s;

int main() {
 ios_base::sync_with_stdio(false);
 cin.tie(NULL);
 #ifndef ONLINE_JUDGE
 freopen(VanLoi".inp","r",stdin);
 freopen(VanLoi".out","w",stdout);
 #endif // ONLINE_JUDGE
 cin >> s;
 for (int i = 0; i < s.length(); i++) a[s[i]]++;
 while (a['[']) {
     cout << "[:|||:]" << '\n';
     a['[']--;
     a[':'] -= 2;
     a['|'] -= 3;
     a[']']--;
 }
 while (a['~']) {
     cout << ":~(" << '\n';
     a[':']--;
     a['~']--;
     a['(']--;
 }
 while (a['X']) {
     cout << ":-X" << '\n';
     a[':']--;
     a['-']--;
     a['X']--;
 }
 while (a['%']) {
     cout << "%0" << '\n';
     a['%']--;
     a['0']--;
 }
 while (a['E']) {
     cout << ":-E" << '\n';
     a[':']--;
     a['-']--;
     a['E']--;
 }
 while (a['8']) {
     cout << "8-0" << '\n';
     a['8']--;
     a['-']--;
     a['0']--;
 }
 while (a['|']) {
     cout << ":-|" << '\n';
     a[':']--;
     a['-']--;
     a['|']--;
 }
 while (a['0']) {
     cout << ":-0" << '\n';
     a[':']--;
     a['-']--;
     a['0']--;
 }
 while (a['C']) {
     cout << ":C" << '\n';
     a[':']--;
     a['C']--;
 }
 while (a['D']) {
     cout << ":D" << '\n';
     a[':']--;
     a['D']--;
 }
 while (a['P']) {
     cout << ":-P" << '\n';
     a[':']--;
     a['-']--;
     a['P']--;
 }
 while (a[92]) {
     cout << ":-\\" << '\n';
     a[':']--;
     a['-']--;
     a[92]--;
 }
 while (a[';'] && a[')'] && a['-']) {
     cout << ";-)" << '\n';
     a[';']--;
     a['-']--;
     a[')']--;
 }
 while (a[';'] && a['('] && a['-']) {
     cout << ";-(" << '\n';
     a[';']--;
     a['-']--;
     a['(']--;
 }
 while (a[')']) {
     cout << ":)" << '\n';
     a[':']--;
     a[')']--;
 }
 while (a['(']) {
     cout << ":(" << '\n';
     a[':']--;
     a['(']--;
 }
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.