#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e6+6;
const ll MOD=1e9+7;
const ll P=257;
const ll P2=5;
char v[MAXN];
ll h[2][MAXN], pot[2][MAXN];
unordered_set<ll> s;
int n;
ll gh(int ini, int fim, int k) {
if(fim<ini) return 0;
ll val=h[k][ini-1]*pot[k][fim-ini+1];
val%=MOD;
val=h[k][fim]-val; val%=MOD;
val+=MOD; val%=MOD;
return val;
}
ll junta(ll a, ll b, int tam, int k) {
if(tam==0) return a;
ll val=a*pot[k][tam];
val%=MOD;
val+=b;
return val%MOD;
}
bool checa(int k) {
vector<int> aux;
for(int i=1; i<=n; i++) if(i!=k) aux.push_back(v[i]);
for(int i=0; i<n/2; i++) {
printf("%c", aux[i]);
if(aux[i]!=aux[i+n/2]) assert(0);
}
return 1;
}
int main() {
scanf("%d", &n);
scanf(" %s", &v[1]);
if(n%2==0) {
printf("NOT POSSIBLE\n");
return 0;
}
pot[0][0]=1; pot[1][0]=1;
for(int i=1; i<=n; i++) {
h[0][i]=h[0][i-1]*P; h[0][i]%=MOD;
h[0][i]+=(v[i]-'A'+1); h[0][i]%=MOD;
h[1][i]=h[1][i-1]*P2; h[1][i]%=MOD;
h[1][i]+=(v[i]-'A'+1); h[1][i]%=MOD;
pot[0][i]=pot[0][i-1]*P; pot[0][i]%=MOD;
pot[1][i]=pot[1][i-1]*P2; pot[1][i]%=MOD;
}
// for(int i=1; i<=n; i++) printf("%d ", pot[i]); printf("\n");
// printf("ghs %lld %lld %lld >> %lld\n", gh(1, 2, 0), gh(2, 3, 0), gh(2, 5, 0), junta(gh(1, 2, 0), gh(2, 3, 0), 2, 0));
int resp=-1;
for(int i=1; i<=n; i++) {
// printf("testando %d\n", i);
ll aa, bb; ll aa2, bb2;
if(i<=(n+1)/2) {
aa=junta( gh(1, i-1, 0), gh(i+1, n/2+1, 0), n/2-i+1, 0);
bb=gh(n/2+2, n, 0);
aa2=junta( gh(1, i-1, 1), gh(i+1, n/2+1, 1), n/2-i+1, 1);
bb2=gh(n/2+2, n, 1);
// printf("[%d %d] [%d %d] (%d) // [%d %d] >> ", 1, i-1, i+1, (n+1)/2, n/2-i+1, (n+1)/2+1, n);
// printf("%lld %lld\n", aa, bb);
}
else {
aa=gh(1, n/2, 0);
bb=junta( gh(n/2+1, i-1, 0) , gh(i+1, n, 0), n-i, 0);
aa2=gh(1, n/2, 1);
bb2=junta( gh(n/2+1, i-1, 1) , gh(i+1, n, 1), n-i, 1);
// printf("[%d %d] // [%d %d] [%d %d] (%d) >> ", 1, n/2, (n+1)/2, i-1, i+1, n, n-i);
// printf("%lld %lld\n", aa, bb);
}
if(aa==bb&&aa2==bb2) {
s.insert(aa2);
//printf("%d inserindo %lld\n", i, aa);
if(s.size()>1) {
printf("NOT UNIQUE\n");
return 0;
}
resp=i;
}
}
if(resp==-1) {
printf("NOT POSSIBLE\n");
return 0;
}
checa(resp);
}
Compilation message
friends.cpp: In function 'int main()':
friends.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
~~~~~^~~~~~~~~~
friends.cpp:43:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf(" %s", &v[1]);
~~~~~^~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
384 KB |
Output is correct |
2 |
Correct |
2 ms |
384 KB |
Output is correct |
3 |
Correct |
2 ms |
384 KB |
Output is correct |
4 |
Correct |
2 ms |
384 KB |
Output is correct |
5 |
Correct |
2 ms |
384 KB |
Output is correct |
6 |
Correct |
2 ms |
384 KB |
Output is correct |
7 |
Correct |
2 ms |
384 KB |
Output is correct |
8 |
Correct |
2 ms |
384 KB |
Output is correct |
9 |
Correct |
2 ms |
384 KB |
Output is correct |
10 |
Correct |
2 ms |
384 KB |
Output is correct |
11 |
Correct |
2 ms |
384 KB |
Output is correct |
12 |
Correct |
3 ms |
384 KB |
Output is correct |
13 |
Correct |
2 ms |
384 KB |
Output is correct |
14 |
Correct |
2 ms |
384 KB |
Output is correct |
15 |
Correct |
2 ms |
384 KB |
Output is correct |
16 |
Correct |
2 ms |
384 KB |
Output is correct |
17 |
Correct |
2 ms |
384 KB |
Output is correct |
18 |
Correct |
2 ms |
384 KB |
Output is correct |
19 |
Correct |
1 ms |
384 KB |
Output is correct |
20 |
Correct |
2 ms |
384 KB |
Output is correct |
21 |
Correct |
2 ms |
384 KB |
Output is correct |
22 |
Correct |
2 ms |
384 KB |
Output is correct |
23 |
Correct |
2 ms |
384 KB |
Output is correct |
24 |
Correct |
2 ms |
384 KB |
Output is correct |
25 |
Correct |
2 ms |
256 KB |
Output is correct |
26 |
Correct |
2 ms |
384 KB |
Output is correct |
27 |
Correct |
2 ms |
384 KB |
Output is correct |
28 |
Correct |
2 ms |
384 KB |
Output is correct |
29 |
Correct |
2 ms |
384 KB |
Output is correct |
30 |
Correct |
2 ms |
384 KB |
Output is correct |
31 |
Correct |
2 ms |
384 KB |
Output is correct |
32 |
Correct |
2 ms |
384 KB |
Output is correct |
33 |
Correct |
2 ms |
384 KB |
Output is correct |
34 |
Correct |
2 ms |
384 KB |
Output is correct |
35 |
Correct |
2 ms |
384 KB |
Output is correct |
36 |
Correct |
2 ms |
384 KB |
Output is correct |
37 |
Correct |
2 ms |
384 KB |
Output is correct |
38 |
Correct |
2 ms |
384 KB |
Output is correct |
39 |
Correct |
2 ms |
384 KB |
Output is correct |
40 |
Correct |
2 ms |
384 KB |
Output is correct |
41 |
Correct |
2 ms |
384 KB |
Output is correct |
42 |
Correct |
2 ms |
284 KB |
Output is correct |
43 |
Correct |
2 ms |
384 KB |
Output is correct |
44 |
Correct |
2 ms |
384 KB |
Output is correct |
45 |
Correct |
3 ms |
512 KB |
Output is correct |
46 |
Correct |
2 ms |
512 KB |
Output is correct |
47 |
Correct |
3 ms |
512 KB |
Output is correct |
48 |
Correct |
2 ms |
384 KB |
Output is correct |
49 |
Correct |
2 ms |
384 KB |
Output is correct |
50 |
Correct |
2 ms |
384 KB |
Output is correct |
51 |
Correct |
2 ms |
384 KB |
Output is correct |
52 |
Correct |
2 ms |
384 KB |
Output is correct |
53 |
Correct |
2 ms |
384 KB |
Output is correct |
54 |
Correct |
3 ms |
384 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
291 ms |
73828 KB |
Output is correct |
2 |
Correct |
293 ms |
73780 KB |
Output is correct |
3 |
Correct |
342 ms |
73940 KB |
Output is correct |
4 |
Correct |
241 ms |
73808 KB |
Output is correct |
5 |
Correct |
278 ms |
73808 KB |
Output is correct |
6 |
Correct |
10 ms |
4224 KB |
Output is correct |
7 |
Correct |
308 ms |
75900 KB |
Output is correct |
8 |
Correct |
178 ms |
60280 KB |
Output is correct |
9 |
Correct |
307 ms |
68808 KB |
Output is correct |
10 |
Correct |
236 ms |
68580 KB |
Output is correct |
11 |
Correct |
167 ms |
55800 KB |
Output is correct |
12 |
Correct |
2 ms |
384 KB |
Output is correct |
13 |
Correct |
2 ms |
384 KB |
Output is correct |
14 |
Correct |
3 ms |
384 KB |
Output is correct |
15 |
Correct |
2 ms |
384 KB |
Output is correct |
16 |
Correct |
2 ms |
384 KB |
Output is correct |
17 |
Correct |
2 ms |
384 KB |
Output is correct |
18 |
Correct |
2 ms |
384 KB |
Output is correct |
19 |
Correct |
3 ms |
384 KB |
Output is correct |
20 |
Correct |
2 ms |
384 KB |
Output is correct |
21 |
Correct |
2 ms |
384 KB |
Output is correct |
22 |
Correct |
2 ms |
384 KB |
Output is correct |
23 |
Correct |
2 ms |
384 KB |
Output is correct |
24 |
Correct |
2 ms |
384 KB |
Output is correct |
25 |
Correct |
2 ms |
384 KB |
Output is correct |
26 |
Correct |
2 ms |
384 KB |
Output is correct |
27 |
Correct |
2 ms |
384 KB |
Output is correct |
28 |
Correct |
2 ms |
384 KB |
Output is correct |
29 |
Correct |
3 ms |
384 KB |
Output is correct |
30 |
Correct |
2 ms |
384 KB |
Output is correct |
31 |
Correct |
2 ms |
384 KB |
Output is correct |
32 |
Correct |
2 ms |
384 KB |
Output is correct |
33 |
Correct |
2 ms |
384 KB |
Output is correct |
34 |
Correct |
2 ms |
384 KB |
Output is correct |
35 |
Correct |
2 ms |
384 KB |
Output is correct |
36 |
Correct |
2 ms |
512 KB |
Output is correct |
37 |
Correct |
2 ms |
256 KB |
Output is correct |
38 |
Correct |
2 ms |
384 KB |
Output is correct |
39 |
Correct |
2 ms |
384 KB |
Output is correct |
40 |
Correct |
2 ms |
384 KB |
Output is correct |
41 |
Correct |
2 ms |
384 KB |
Output is correct |
42 |
Correct |
2 ms |
384 KB |
Output is correct |
43 |
Correct |
2 ms |
384 KB |
Output is correct |
44 |
Correct |
2 ms |
384 KB |
Output is correct |
45 |
Correct |
0 ms |
384 KB |
Output is correct |
46 |
Correct |
2 ms |
384 KB |
Output is correct |
47 |
Correct |
2 ms |
384 KB |
Output is correct |
48 |
Correct |
2 ms |
384 KB |
Output is correct |
49 |
Correct |
2 ms |
384 KB |
Output is correct |
50 |
Correct |
2 ms |
384 KB |
Output is correct |
51 |
Correct |
2 ms |
384 KB |
Output is correct |
52 |
Correct |
2 ms |
384 KB |
Output is correct |
53 |
Correct |
2 ms |
384 KB |
Output is correct |
54 |
Correct |
2 ms |
384 KB |
Output is correct |