Pagini recente » Cod sursa (job #2203314) | Profil cartkid | Monitorul de evaluare | Cod sursa (job #1341424) | Cod sursa (job #1016239)
#include <fstream>
#include <vector>
#define Nmax 1099
#define pb push_back
#define mp make_pair
using namespace std;
ifstream f("dreptpal.in");
ofstream g("dreptpal.out");
int M,n,N,arie,T[2*Nmax],P[2*Nmax],Sol[Nmax][2*Nmax];
inline void Preprocess()
{
//din "1234" fac "-99 -1 1 -1 2 -1 3 -1 4 - 88"
T[0]=-99;T[1]=-1;
for(int i=1;i<=N;++i)
{
int x;
f>>x;
T[2*i]=x;T[2*i+1]=-1;
}
T[2*N+2]=-88;
N*=2;
}
inline int FindLPS()
{
int C=0,R=0;
for(int i=0;i<=2*N+5;++i)P[i]=0;
for(int i=1;i<=N;++i)
{
int i_mirror=2*C-i;
if(R>i)P[i]=min(R-i,P[i_mirror]);
else P[i]=0;
while(T[i+1+P[i]] == T[i-1-P[i]])++P[i];
if(i+P[i]>R)
{
C=i;
R=i+P[i];
}
}
}
inline void PrintLPS(int x)
{
for(int i=1;i<=N;++i)
if(i%2==0)
{
while(P[i]>=1)
{
int st=(i-1-P[i])/2;
Sol[x][st+1]=P[i];
P[i]-=2;
}
}
}
int main()
{
f>>M>>n;
for(int i=1;i<=M;++i)
{
N=n;
Preprocess();
FindLPS();
PrintLPS(i);
}
g<<arie<<'\n';
f.close();g.close();
return 0;
}