Pagini recente » Cod sursa (job #1079141) | Cod sursa (job #636759) | Cod sursa (job #2643158) | Cod sursa (job #470030) | Cod sursa (job #636806)
Cod sursa(job #636806)
#include <fstream>
#include <cstring>
using namespace std;
const char InFile[]="palm.in";
const char OutFile[]="palm.out";
const int MaxN=512;
const int SIGMA=32;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,sol,AIB2D[MaxN][SIGMA];
char S[MaxN];
inline int LSB(const int &x)
{
return x&-x;
}
inline void AIB2DUpdate(const int &x, const int &y, const int &val)
{
for(register int i=x;i<=N;i+=LSB(i))
{
for(register int j=y;j<SIGMA;j+=LSB(j))
{
AIB2D[i][j]=max(AIB2D[i][j],val);
}
}
}
inline int AIB2DQuery(const int &x, const int &y)
{
int sol=0;
for(register int i=x;i>0;i-=LSB(i))
{
for(register int j=y;j>0;j-=LSB(j))
{
sol=max(sol,AIB2D[i][j]);
}
}
return sol;
}
int main()
{
fin>>(S+1);
fin.close();
N=strlen(S+1);
for(register int i=1;i<=N;++i)
{
S[i]=SIGMA-(1+S[i]-'a');
}
for(register int i=N;i>0;--i)
{
for(register int j=N;j>=i;--j)
{
if(i==j)
{
sol=max(sol,1);
AIB2DUpdate(j+1,S[i],1);
}
else if(S[i]==S[j])
{
int x=2+AIB2DQuery(j,S[i]);
sol=max(sol,x);
AIB2DUpdate(j+1,S[i],x);
}
}
}
fout<<sol;
fout.close();
return 0;
}