Submission #135722

# Submission time Handle Problem Language Result Execution time Memory
135722 2019-07-24T10:04:53 Z Vlatko Three Friends (BOI14_friends) C++14
100 / 100
183 ms 58104 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll mod = 1e9 + 9;
const ll p = 37;
const ll pinv = 297297300;

const int MAXN = 2000010;

int N, ans1, ans2;
int S[MAXN];
ll h[MAXN];
ll ppow[MAXN];
ll ppowinv[MAXN];

ll subhash(int a, int b) {
	if (a > b) return 0;
	ll res = h[b] - h[a-1];
	if (res < 0) res += mod;
	res = (res * ppowinv[a]) % mod; 
	return res;
}

ll combine(int a, int b, int c, int d) {
	ll x = subhash(a, b);
	ll y = subhash(c, d);
	y = (y * ppow[b-a+1]) % mod;
	return (x + y) % mod;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	cin >> N;
	if (N % 2 == 0) {
		cout << "NOT POSSIBLE\n";
		return 0;
	}
	for (int i = 1; i <= N; ++i) {
		char ch;
		cin >> ch;
		S[i] = ch - 'A' + 1;
	}
	ppow[0] = ppowinv[0] = 1;
	for (int i = 1; i <= N; ++i) {
		ppow[i] = (ppow[i-1] * p) % mod;
		ppowinv[i] = (ppowinv[i-1] * pinv) % mod;
	}
	h[0] = 0;
	for (int i = 1; i <= N; ++i) {
		h[i] = (h[i-1] + ppow[i]*S[i]) % mod;
	}
	ans1 = -1;
	for (int i = 1; i <= N; ++i) {
		if (i <= N/2) {
			if (combine(1, i-1, i+1, (N/2)+1) == subhash((N/2)+2, N)) {
				if (ans1 != -1 && subhash(ans1, ans2) != subhash((N/2)+2, N)) {
					cout << "NOT UNIQUE\n";
					return 0;
				}
				ans1 = (N/2)+2;
				ans2 = N;
			}
		} else if (i == (N/2)+1) {
			if (subhash(1, i-1) == subhash(i+1, N)) {
				if (ans1 != -1 && subhash(ans1, ans2) != subhash(1, i-1)) {
					cout << "NOT UNIQUE\n";
					return 0;
				}
				ans1 = 1;
				ans2 = N/2;
			}
		} else {
			if (subhash(1, N/2) == combine((N/2)+1, i-1, i+1, N)) {
				if (ans1 != -1 && subhash(ans1, ans2) != subhash(1, N/2)) {
					cout << "NOT UNIQUE\n";
					return 0;
				}
				ans1 = 1;
				ans2 = N/2;
			}
		}
	}
	if (ans1 == -1) {
		cout << "NOT POSSIBLE\n";
	} else {
		for (int i = ans1; i <= ans2; ++i) {
			cout << char(S[i] + 'A' - 1);
		}
		cout << "\n";
	}
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 420 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 424 KB Output is correct
6 Correct 2 ms 392 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 3 ms 376 KB Output is correct
10 Correct 2 ms 388 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 2 ms 376 KB Output is correct
14 Correct 2 ms 380 KB Output is correct
15 Correct 2 ms 376 KB Output is correct
16 Correct 2 ms 380 KB Output is correct
17 Correct 3 ms 376 KB Output is correct
18 Correct 2 ms 380 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 2 ms 376 KB Output is correct
23 Correct 2 ms 376 KB Output is correct
24 Correct 2 ms 376 KB Output is correct
25 Correct 2 ms 376 KB Output is correct
26 Correct 2 ms 376 KB Output is correct
27 Correct 2 ms 376 KB Output is correct
28 Correct 2 ms 424 KB Output is correct
29 Correct 2 ms 376 KB Output is correct
30 Correct 2 ms 388 KB Output is correct
31 Correct 2 ms 376 KB Output is correct
32 Correct 2 ms 376 KB Output is correct
33 Correct 2 ms 348 KB Output is correct
34 Correct 2 ms 376 KB Output is correct
35 Correct 2 ms 376 KB Output is correct
36 Correct 2 ms 376 KB Output is correct
37 Correct 2 ms 376 KB Output is correct
38 Correct 2 ms 380 KB Output is correct
39 Correct 2 ms 424 KB Output is correct
40 Correct 2 ms 376 KB Output is correct
41 Correct 2 ms 392 KB Output is correct
42 Correct 2 ms 376 KB Output is correct
43 Correct 2 ms 376 KB Output is correct
44 Correct 2 ms 376 KB Output is correct
45 Correct 2 ms 376 KB Output is correct
46 Correct 2 ms 376 KB Output is correct
47 Correct 2 ms 376 KB Output is correct
48 Correct 2 ms 376 KB Output is correct
49 Correct 2 ms 376 KB Output is correct
50 Correct 2 ms 376 KB Output is correct
51 Correct 2 ms 376 KB Output is correct
52 Correct 2 ms 376 KB Output is correct
53 Correct 2 ms 380 KB Output is correct
54 Correct 2 ms 376 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 173 ms 58032 KB Output is correct
2 Correct 179 ms 58100 KB Output is correct
3 Correct 172 ms 58096 KB Output is correct
4 Correct 174 ms 58104 KB Output is correct
5 Correct 172 ms 58096 KB Output is correct
6 Correct 2 ms 380 KB Output is correct
7 Correct 183 ms 58096 KB Output is correct
8 Correct 135 ms 51448 KB Output is correct
9 Correct 157 ms 52268 KB Output is correct
10 Correct 157 ms 52272 KB Output is correct
11 Correct 123 ms 47700 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 2 ms 376 KB Output is correct
14 Correct 2 ms 388 KB Output is correct
15 Correct 2 ms 348 KB Output is correct
16 Correct 2 ms 376 KB Output is correct
17 Correct 2 ms 504 KB Output is correct
18 Correct 2 ms 376 KB Output is correct
19 Correct 2 ms 376 KB Output is correct
20 Correct 2 ms 376 KB Output is correct
21 Correct 2 ms 376 KB Output is correct
22 Correct 2 ms 376 KB Output is correct
23 Correct 2 ms 376 KB Output is correct
24 Correct 2 ms 376 KB Output is correct
25 Correct 2 ms 376 KB Output is correct
26 Correct 3 ms 376 KB Output is correct
27 Correct 2 ms 376 KB Output is correct
28 Correct 2 ms 376 KB Output is correct
29 Correct 2 ms 376 KB Output is correct
30 Correct 2 ms 380 KB Output is correct
31 Correct 2 ms 376 KB Output is correct
32 Correct 2 ms 376 KB Output is correct
33 Correct 2 ms 376 KB Output is correct
34 Correct 2 ms 376 KB Output is correct
35 Correct 2 ms 376 KB Output is correct
36 Correct 2 ms 376 KB Output is correct
37 Correct 2 ms 376 KB Output is correct
38 Correct 2 ms 376 KB Output is correct
39 Correct 2 ms 376 KB Output is correct
40 Correct 2 ms 376 KB Output is correct
41 Correct 2 ms 376 KB Output is correct
42 Correct 2 ms 376 KB Output is correct
43 Correct 2 ms 376 KB Output is correct
44 Correct 2 ms 376 KB Output is correct
45 Correct 2 ms 376 KB Output is correct
46 Correct 2 ms 376 KB Output is correct
47 Correct 2 ms 376 KB Output is correct
48 Correct 2 ms 376 KB Output is correct
49 Correct 2 ms 380 KB Output is correct
50 Correct 2 ms 376 KB Output is correct
51 Correct 2 ms 424 KB Output is correct
52 Correct 2 ms 376 KB Output is correct
53 Correct 2 ms 376 KB Output is correct
54 Correct 2 ms 376 KB Output is correct