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
AC × 3
AC × 13
AC × 28
AC × 43
AC × 62
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