Codeforces Round 1096 (Div. 3) I can't find where this solution went wrong for Problem D: Palindromex...
For Problem D: Palindromex
Where could be my answer wrong? I checked 3 conditions
- I checked if the first 0 is in the center or not [Y 0 Y]
- I checked if the second 0 is in the center or not [Y 0 Y]
- I checked if a palindrome brackets the two zeroes or not (my logic was if I need to have 2 zeroes they must form a palindrome. If it's an odd palindrome then [Y 0 X 0 Y] or if even palindrome [Y 0 X X 0 Y].
(I take zero indexing)
#include<bits/stdc++.h>
#define p(x) cout<<x<<endl;
#define m(x) cout<<x<<" ";
#define ll long long
using namespace std;
int main (){
ll t;
cin>>t;
while(t--) {
ll n;
cin>>n;
ll n2 = n*2;
vector<ll> v(n2);
ll idx1=-1, idx2=-1;
for(ll i=0;i<n2;i++){
cin>>v[i];
if(v[i]==0 && idx1==-1){
idx1=i;
}
else if (v[i]==0 && idx1>=0){
idx2=i;
}
}
// idx1 at middle
ll left=0,right=0;
vector<ll> arr1(n+1,0);
arr1[0] = 1;
left = idx1-1;
right=idx1+1;
while(left>=0 && right<n2){
if(idx1==0){
break;
}
if(v[left]==v[right]){
arr1[v[left]] = 1;
} else {
break;
}
left--;
right++;
}
// idx2 at middle
left = 0, right=0;
vector<ll> arr2(n+1, 0);
arr2[0] = 1;
left = idx2-1;
right = idx2+1;
while(left>=0 && right<n2){
if(idx2==n2-1){
break;
}
if(v[left]==v[right]){
arr2[v[left]] = 1;
} else {
break;
}
left--;
right++;
}
// combine
ll diff = idx2+idx1;
vector<ll> arr3(n+1, 0);
arr3[0] = 1;
if(diff&1){
left = diff/2;
right = left+1;
while(left>=0 && right<n2){
if(v[left]==v[right]){
arr3[v[left]] = 1;
} else {
fill(arr3.begin(), arr3.end(), 0);
arr3[0] = 1;
break;
}
left--;
right++;
}
}
else {
ll mid = diff/2;
arr3[v[mid]] = 1;
left = mid-1, right= mid+1;
while(left>=0 && right<n2){
if(v[left]==v[right]){
arr3[v[left]] = 1;
} else {
fill(arr3.begin(), arr3.end(), 0);
arr3[0] = 1;
break;
}
left--;
right++;
}
}
ll m1=0,m2=0,m3=0;
for(ll i=0;i<=n;i++){
if(arr1[i]==0){
m1=i;
break;
}
}
for(ll i=0;i<=n;i++){
if(arr2[i]==0){
m2=i;
break;
}
}
for(ll i=0;i<=n;i++){
if(arr3[i]==0){
m3=i;
break;
}
}
p(max(m1,max(m2,m3)))
}
return 0;
}




