| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
但是为什么WA了呢In Reply To:枚举变化,排序单词内部字母,直接hash. Posted by:mixter at 2006-09-12 11:11:21 #include <iostream>
#include <algorithm>
using namespace std;
struct node
{
char q[25];
int index;
}p[10001];
char zifu[25];
int dp[10001][2];
const int prim=100001;
int sum=0;
struct h
{
int key;
int num;
}hash[prim];
void insert(long v,int aim)
{
long key=v; while(key<0) key+=prim;
if(key>=prim) key=key%prim;
while(hash[key].num!=-1)
{
if(hash[key].key==v){ return; }
key=(key+1)%prim;
}
hash[key].num=aim; hash[key].key=v;
}
int search(long v)
{
long key=v; while(key<0) key+=prim;
if(key>=prim) key=key%prim;
while(hash[key].num!=-1)
{
if(hash[key].key==v) return hash[key].num;
key=(key+1)%prim;
}
return -1;
}
bool cmp(node x,node y)
{
return strlen(x.q)<strlen(y.q);
}
void init()
{
int i;
for(i=0;i<prim;i++)
{
hash[i].num=-1;
}
}
int main()
{
init();
int i,j,len;
memset(dp,0,sizeof(dp));
int sums=0;
int maxs=0;
while(cin>>p[sums].q)
{
if(strlen(p[sums].q)>maxs)
{
maxs=strlen(p[sums].q);
}
sums++;
}
for(i=0;i<sums;i++)
{
dp[i][1]=-1;
}
sort(p,p+sums,cmp);
for(i=0;i<sums;i++)
{
sum=0;
len=strlen(p[i].q);
//cout<<p[i].q<<endl;
p[i].index=i;
if(len<maxs)
{
memcpy(zifu,p[i].q,len);
sort(zifu,zifu+len);
zifu[len]='\0';
for(j=0;j<len;j++)
{
sum=zifu[j]-'a'+1+sum*26;
if(sum>=prim)
{
sum%=prim;
}
}
insert(sum,i);
}
}
int k;
for(i=sums-1;i>=0;i--)
{
len=strlen(p[i].q);
memcpy(zifu,p[i].q,len);
sort(zifu,zifu+len);
zifu[len]='\0';
for(j=0;j<len;j++)
{
sum=0;
for(k=0;k<len;k++)
{
if(k==j)
{
continue;
}
sum=sum*26+zifu[k]-'a'+1;
if(sum>=prim)
{
sum=sum%prim;
}
}
int v=search(sum);
if(v!=-1)
{
if(dp[v][0]<=dp[i][0]+1)
{
dp[v][0]=dp[i][0]+1;
dp[v][1]=i;
}
}
}
}
maxs=0;
int aim=0;
for(i=0;i<sums;i++)
{
if(dp[i][0]>maxs)
{
maxs=dp[i][0];
aim=i;
}
}
while(aim!=-1)
{
cout<<p[aim].q<<endl;
aim=dp[aim][1];
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator