Submission #1134760

#TimeUsernameProblemLanguageResultExecution timeMemory
1134760cpdreamerPalindromic Partitions (CEOI17_palindromic)C++20
60 / 100
10093 ms3052 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define P pair #define S second #define F first #define all(v) v.begin(),v.end() #define V vector #define pb push_back const ll MOD=998244353; struct segtree{ private: struct node{ ll ans; ll l; ll maxl_1; ll maxl_2; ll maxr_1; ll maxr_2; }; node merge(node a,node b){ if(a.maxl_1==LLONG_MIN) return b; if(b.maxl_1==LLONG_MIN) return a; static node c; c.l=a.l+b.l; c.ans=max(max(a.ans,b.ans),max(b.maxl_1+a.maxr_2-1,b.maxl_2+a.maxr_1-1)); c.maxl_1=max(a.maxl_1,b.maxl_1-a.l); c.maxl_2=max(a.maxl_2,b.maxl_2-a.l); c.maxr_1=max(b.maxr_1,a.maxr_1-b.l); c.maxr_2=max(b.maxr_2,a.maxr_2-b.l); return c; } node neutral{0,0,LLONG_MIN}; node single(ll a){ return{0,1,a,-a,a,-a}; } public: V<node>query; int size; void init(int n){ size=1; while(size<n){ size*=2; } query.resize(2*size); } void build(V<int>&a,int x,int lx,int rx){ if(rx-lx==1){ if(lx<(int)a.size()){ query[x]=single(a[lx]); } return; } int m=(lx+rx)/2; build(a,2*x+1,lx,m); build(a,2*x+2,m,rx); query[x]=merge(query[2*x+1],query[2*x+2]); } void build(V<int>&a){ build(a,0,0,size); } void update(int i,int v,int x,int lx,int rx){ if(rx-lx==1){ query[x]=single(v); return; } int m=(lx+rx)/2; if(i<m) update(i,v,2*x+1,lx,m); else update(i,v,2*x+2,m,rx); } void update(int i,int v){ update(i,v,0,0,size); } node calc(int l,int r,int x,int lx,int rx) { if (r <= lx || rx >= l) return neutral; if (lx >= l && rx <= r) return query[x]; int m = (lx + rx) / 2; node a = calc(l, r, 2 * x + 1, lx, m); node b = calc(l, r, 2 * x + 2, m, rx); return merge(a, b); } }; void file() { freopen("input.txt.txt", "r", stdin); freopen("output.txt.txt", "w", stdout); } bool check(string &t1,string t2){ reverse(all(t2)); return t1==t2; } void solve() { string s; cin>>s; int n=(int)s.length(); V<string>v1,v2; int l=-1,r=n; int p1=0,p2=n-1; string t1,t2; int c=0; while(p1<p2){ t1+=s[p1]; t2+=s[p2]; if(check(t1,t2)){ c+=2; l=p1; r=p2; t1="";t2=""; } p1++; p2--; } if(r-l>1) c++; cout<<c<<endl; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // file(); int t; cin>>t; while(t--) { solve(); } }

Compilation message (stderr)

palindromic.cpp: In function 'void file()':
palindromic.cpp:90:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |     freopen("input.txt.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
palindromic.cpp:91:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |     freopen("output.txt.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...