Submission #1942280
Source Code Expand
#include <string> #include <vector> #include <iostream> #include <algorithm> using namespace std; vector<int> dat; vector<int> tmp; int doubles, lengths; bool compare_suffix(int i, int j) { if (dat[i] == dat[j]) { int ri = (i + doubles <= lengths ? dat[i + doubles] : -1); int rj = (j + doubles <= lengths ? dat[j + doubles] : -1); return ri < rj; } return dat[i] < dat[j]; } vector<int> suffix_array(string S) { lengths = S.size(); vector<int> arrays(lengths + 1); dat.resize(lengths + 1); tmp.resize(lengths + 1); for (int i = 0; i <= lengths; i++) { arrays[i] = i; dat[i] = i < lengths ? S[i] : -1; } for (doubles = 1; doubles <= lengths; doubles <<= 1) { sort(arrays.begin(), arrays.begin() + lengths + 1, compare_suffix); tmp[arrays[0]] = 0; for (int i = 1; i <= lengths; i++) { tmp[arrays[i]] = tmp[arrays[i - 1]] + (compare_suffix(arrays[i - 1], arrays[i]) ? 1 : 0); } for (int i = 0; i <= lengths; i++) { dat[i] = tmp[i]; } } return arrays; } string s; int K, cnt[300009]; int main() { cin.tie(0); ios_base::sync_with_stdio(false); cin >> s >> K; int n = s.size(); for (int i = 0; i < n; i++) cnt[i + 1] = cnt[i] + (s[i] != 'a'); if (cnt[n] <= K) cout << string(n - K, 'a') << '\n'; else { int ca = 0; for (int i = 0; i <= n && cnt[i] <= K; i++) ca = max(ca, i + K - cnt[i]); vector<int> sp; for (int i = 0; i <= n && cnt[i] <= K; i++) { if (i + K - cnt[i] == ca) sp.push_back(i); } vector<int> sa = suffix_array(s), inv(s.size() + 1); for (int i = 0; i <= n; i++) inv[sa[i]] = i; int np = -1, pos = -1; for (int i : sp) { if (np == -1 || (np > inv[i])) { np = inv[i]; pos = i; } } cout << string(ca, 'a') + s.substr(pos) << '\n'; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - アメージングな文字列は、きみが作る! |
User | square1001 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 1846 Byte |
Status | AC |
Exec Time | 450 ms |
Memory | 9352 KB |
Judge Result
Set Name | Sample | Subtask1 | Subtask2 | Subtask3 | All | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 10 / 10 | 10 / 10 | 20 / 20 | 60 / 60 | ||||||||||
Status |
|
|
|
|
|
Set Name | Test Cases |
---|---|
Sample | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt |
Subtask1 | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 10_rand_01.txt, 10_rand_02.txt, 10_rand_03.txt, 10_rand_04.txt, 10_rand_05.txt, 20_hand_01.txt, 20_hand_02.txt, 20_hand_03.txt, 20_hand_04.txt, 20_hand_05.txt |
Subtask2 | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 10_rand_01.txt, 10_rand_02.txt, 10_rand_03.txt, 10_rand_04.txt, 10_rand_05.txt, 20_hand_01.txt, 20_hand_02.txt, 20_hand_03.txt, 20_hand_04.txt, 20_hand_05.txt, 40_rand_01.txt, 40_rand_02.txt, 40_rand_03.txt, 40_rand_04.txt, 40_rand_05.txt, 40_rand_06.txt, 40_rand_07.txt, 40_rand_08.txt, 40_rand_09.txt, 40_rand_10.txt, 50_hand_01.txt, 50_hand_02.txt, 50_hand_03.txt, 50_hand_04.txt, 50_hand_05.txt |
Subtask3 | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 10_rand_01.txt, 10_rand_02.txt, 10_rand_03.txt, 10_rand_04.txt, 10_rand_05.txt, 20_hand_01.txt, 20_hand_02.txt, 20_hand_03.txt, 20_hand_04.txt, 20_hand_05.txt, 40_rand_01.txt, 40_rand_02.txt, 40_rand_03.txt, 40_rand_04.txt, 40_rand_05.txt, 40_rand_06.txt, 40_rand_07.txt, 40_rand_08.txt, 40_rand_09.txt, 40_rand_10.txt, 50_hand_01.txt, 50_hand_02.txt, 50_hand_03.txt, 50_hand_04.txt, 50_hand_05.txt, 60_rand_01.txt, 60_rand_02.txt, 60_rand_03.txt, 60_rand_04.txt, 60_rand_05.txt, 60_rand_06.txt, 60_rand_07.txt, 60_rand_08.txt, 70_hand_01.txt, 70_hand_02.txt, 70_hand_03.txt, 70_hand_04.txt, 70_hand_05.txt, 70_hand_06.txt, 70_hand_07.txt |
All | 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 10_rand_01.txt, 10_rand_02.txt, 10_rand_03.txt, 10_rand_04.txt, 10_rand_05.txt, 20_hand_01.txt, 20_hand_02.txt, 20_hand_03.txt, 20_hand_04.txt, 20_hand_05.txt, 40_rand_01.txt, 40_rand_02.txt, 40_rand_03.txt, 40_rand_04.txt, 40_rand_05.txt, 40_rand_06.txt, 40_rand_07.txt, 40_rand_08.txt, 40_rand_09.txt, 40_rand_10.txt, 50_hand_01.txt, 50_hand_02.txt, 50_hand_03.txt, 50_hand_04.txt, 50_hand_05.txt, 60_rand_01.txt, 60_rand_02.txt, 60_rand_03.txt, 60_rand_04.txt, 60_rand_05.txt, 60_rand_06.txt, 60_rand_07.txt, 60_rand_08.txt, 70_hand_01.txt, 70_hand_02.txt, 70_hand_03.txt, 70_hand_04.txt, 70_hand_05.txt, 70_hand_06.txt, 70_hand_07.txt, 80_rand_01.txt, 80_rand_02.txt, 80_rand_03.txt, 80_rand_04.txt, 80_rand_05.txt, 80_rand_06.txt, 80_rand_07.txt, 80_rand_08.txt, 80_rand_09.txt, 80_rand_10.txt, 90_hand_01.txt, 90_hand_02.txt, 90_hand_03.txt, 90_hand_04.txt, 90_hand_05.txt, 90_hand_06.txt, 90_hand_07.txt, 90_hand_08.txt, 90_hand_09.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_example_01.txt | AC | 1 ms | 256 KB |
00_example_02.txt | AC | 1 ms | 256 KB |
00_example_03.txt | AC | 1 ms | 256 KB |
10_rand_01.txt | AC | 1 ms | 256 KB |
10_rand_02.txt | AC | 1 ms | 256 KB |
10_rand_03.txt | AC | 1 ms | 256 KB |
10_rand_04.txt | AC | 1 ms | 256 KB |
10_rand_05.txt | AC | 1 ms | 256 KB |
20_hand_01.txt | AC | 1 ms | 256 KB |
20_hand_02.txt | AC | 1 ms | 256 KB |
20_hand_03.txt | AC | 1 ms | 256 KB |
20_hand_04.txt | AC | 1 ms | 256 KB |
20_hand_05.txt | AC | 1 ms | 256 KB |
40_rand_01.txt | AC | 1 ms | 256 KB |
40_rand_02.txt | AC | 1 ms | 256 KB |
40_rand_03.txt | AC | 1 ms | 256 KB |
40_rand_04.txt | AC | 1 ms | 256 KB |
40_rand_05.txt | AC | 1 ms | 256 KB |
40_rand_06.txt | AC | 1 ms | 256 KB |
40_rand_07.txt | AC | 1 ms | 256 KB |
40_rand_08.txt | AC | 1 ms | 256 KB |
40_rand_09.txt | AC | 1 ms | 256 KB |
40_rand_10.txt | AC | 1 ms | 256 KB |
50_hand_01.txt | AC | 1 ms | 256 KB |
50_hand_02.txt | AC | 1 ms | 256 KB |
50_hand_03.txt | AC | 1 ms | 256 KB |
50_hand_04.txt | AC | 1 ms | 256 KB |
50_hand_05.txt | AC | 1 ms | 256 KB |
60_rand_01.txt | AC | 2 ms | 256 KB |
60_rand_02.txt | AC | 1 ms | 256 KB |
60_rand_03.txt | AC | 2 ms | 384 KB |
60_rand_04.txt | AC | 2 ms | 256 KB |
60_rand_05.txt | AC | 2 ms | 256 KB |
60_rand_06.txt | AC | 2 ms | 256 KB |
60_rand_07.txt | AC | 2 ms | 256 KB |
60_rand_08.txt | AC | 2 ms | 256 KB |
70_hand_01.txt | AC | 1 ms | 256 KB |
70_hand_02.txt | AC | 1 ms | 256 KB |
70_hand_03.txt | AC | 2 ms | 256 KB |
70_hand_04.txt | AC | 2 ms | 256 KB |
70_hand_05.txt | AC | 2 ms | 256 KB |
70_hand_06.txt | AC | 2 ms | 256 KB |
70_hand_07.txt | AC | 2 ms | 256 KB |
80_rand_01.txt | AC | 203 ms | 3896 KB |
80_rand_02.txt | AC | 155 ms | 3280 KB |
80_rand_03.txt | AC | 351 ms | 6172 KB |
80_rand_04.txt | AC | 219 ms | 4016 KB |
80_rand_05.txt | AC | 280 ms | 5068 KB |
80_rand_06.txt | AC | 280 ms | 5068 KB |
80_rand_07.txt | AC | 315 ms | 5556 KB |
80_rand_08.txt | AC | 273 ms | 4944 KB |
80_rand_09.txt | AC | 312 ms | 5556 KB |
80_rand_10.txt | AC | 154 ms | 3280 KB |
90_hand_01.txt | AC | 3 ms | 2324 KB |
90_hand_02.txt | AC | 3 ms | 1940 KB |
90_hand_03.txt | AC | 410 ms | 9352 KB |
90_hand_04.txt | AC | 414 ms | 8200 KB |
90_hand_05.txt | AC | 450 ms | 7276 KB |
90_hand_06.txt | AC | 411 ms | 8076 KB |
90_hand_07.txt | AC | 412 ms | 7948 KB |
90_hand_08.txt | AC | 412 ms | 7948 KB |
90_hand_09.txt | AC | 409 ms | 7948 KB |