이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
bool equal (int N, string & S, int extraChar) {
string a = "", b = "";
for (int i = 0; i < N; i++) {
if (i == extraChar) continue;
if ((int)a.size() < N/2) {
a += S[i];
} else {
b += S[i];
}
}
return a == b;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int N; // cin >> N;
string S; cin >> S;
N = (int)S.size();
if (N % 2 == 0) {
cout << "NOT POSSIBLE\n";
return 0;
}
int extraChar = 0, numSubstr = 0;
char left = ' ', right = ' ';
for (int i = 1; i <= N/2; i++)
left ^= S[i];
for (int i = N/2 + 1; i < N; i++)
right ^= S[i];
if (left == right && equal(N, S, extraChar)) numSubstr++;
for (int currChar = 1; currChar <= N/2; currChar++) {
left ^= S[currChar];
left ^= S[currChar - 1];
if (left == right) {
extraChar = currChar;
if (equal(N, S, extraChar)) numSubstr++;
if (numSubstr > 1) {
cout << "NOT UNIQUE\n";
return 0;
}
}
}
for (int currChar = N/2 + 1; currChar < N; currChar++) {
right ^= S[currChar];
right ^= S[currChar - 1];
if (left == right) {
extraChar = currChar;
if (equal(N, S, extraChar)) numSubstr++;
if (numSubstr > 1) {
cout << "NOT UNIQUE\n";
return 0;
}
}
}
if (numSubstr == 0) {
cout << "NOT POSSIBLE\n";
} else if (numSubstr > 1) {
cout << "NOT UNIQUE\n";
} else {
string a = "", b = "";
for (int i = 0; i < N; i++) {
if (i == extraChar) continue;
if ((int)a.size() < N/2) {
a += S[i];
} else {
b += S[i];
}
}
if (a == b) cout << a << '\n';
else cout << "NOT POSSIBLE\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |