day-6
补了昨天的E if else 是真的多。。。。
https://codeforces.com/contest/1530/problem/E
#define mid ((tr[k].l + tr[k].r) >> 1)
#define ls k << 1
#define rs k << 1 | 1
const int maxn = 1e5 + 7;
const int mod = 1e9 + 7;
int n, m, k, t, a[maxn];
int main()
{
ioss;
cin >> t;
while (t--) {
string s, t, ans;
int cnt[200];
memset(cnt, 0, sizeof cnt);
cin >> s;
sort(s.begin(), s.end());
if (s.size() == 1 || s[0] != s[1] || s[0] == s[s.size() - 1]) {
cout << s << endl;
continue;
}
for (int i = 0; i < s.size(); i++)
cnt[s[i]]++;
int solofzeo = -1;
for (int i = 'a'; i <= 'z'; i++) {
if (cnt[i] == 1) {
solofzeo = i;
break;
}
}
if (solofzeo != -1) {
cout << char(solofzeo);
for (int i = 0; i < s.size(); i++)
if (s[i] != solofzeo)
cout << s[i];
cout << endl;
continue;
}
if (cnt[s[0]] - 2 <= s.size() - cnt[s[0]]) {
int firnotmi = 0, firmicnt = cnt[s[0]] - 2;
while (s[firnotmi] == s[0])
firnotmi++;
ans += s[0], ans += s[0];
for (int i = firnotmi; i < s.size(); i++) {
ans += s[i];
if (firmicnt != 0)
ans += s[0], firmicnt--;
}
cout << ans << endl;
continue;
}
int notzeo = 0;
vector<int> notzeovec;
for (int i = 'a'; i <= 'z'; i++)
if (cnt[i] != 0)
notzeo++, notzeovec.push_back(i);
if (notzeo == 2) {
cout << s[0];
cnt[s[0]]--;
for (int i = 'z'; i >= 'a'; i--)
while (cnt[i])
cout << char(i), cnt[i]--;
cout << endl;
} else {
cout << s[0] << s[cnt[s[0]]];
cnt[s[cnt[s[0]]]]--, cnt[s[0]]--;
while (cnt[s[0]] != 0)
cout << s[0], cnt[s[0]]--;
cout << char(notzeovec[2]);
cnt[notzeovec[2]]--;
for (int i = 'a'; i <= 'z'; i++)
while (cnt[i])
cout << char(i), cnt[i]--;
cout << endl;
}
}
}
终于周日了。。想睡觉
我看见 你