mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Create 1401.cpp
This commit is contained in:
parent
94043bfa64
commit
9e0f59ae29
86
UVA/1401.cpp
Normal file
86
UVA/1401.cpp
Normal file
|
@ -0,0 +1,86 @@
|
|||
/// UVa 1401
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
const int MAXBUFFSIZE = 300100;
|
||||
const int BUFFERSIZE = 105;
|
||||
const int MAXS = 4005;
|
||||
const int MOD = 20071027;
|
||||
const int MAXPOOLNODESIZE = 400100;
|
||||
struct node
|
||||
{
|
||||
node* next[26];
|
||||
int val;
|
||||
};
|
||||
|
||||
node _root;
|
||||
node* root=&_root;
|
||||
|
||||
node pool[MAXPOOLNODESIZE];
|
||||
int c_pool_guard=0;
|
||||
|
||||
char buff[MAXBUFFSIZE];
|
||||
int dp[MAXBUFFSIZE];
|
||||
char tmp[BUFFERSIZE];
|
||||
int StringLength[MAXS];
|
||||
int main()
|
||||
{
|
||||
int _G_cnt=0;
|
||||
while(gets(buff)!=NULL)
|
||||
{
|
||||
_G_cnt++;
|
||||
memset(dp,0,sizeof(dp));
|
||||
memset(StringLength,0,sizeof(StringLength));
|
||||
memset(root,0,sizeof(node));
|
||||
c_pool_guard=0;
|
||||
|
||||
int n;
|
||||
scanf("%d%*c",&n);
|
||||
int ccnt=1;
|
||||
while(n--)
|
||||
{
|
||||
gets(tmp);
|
||||
char* p=tmp;
|
||||
node* np=root;
|
||||
int _c=0;
|
||||
while(*p!=0)
|
||||
{
|
||||
if(np->next[*p-'a']==NULL)
|
||||
{
|
||||
np->next[*p-'a']=&pool[c_pool_guard++];
|
||||
memset(np->next[*p-'a'],0,sizeof(node));
|
||||
}
|
||||
np=np->next[*p-'a'];
|
||||
_c++;
|
||||
p++;
|
||||
}
|
||||
StringLength[ccnt]=_c;
|
||||
np->val=ccnt++;
|
||||
}
|
||||
int len=strlen(buff);
|
||||
dp[len]=1;
|
||||
for(int i=len-1; i>=0; --i)
|
||||
{
|
||||
/// Search
|
||||
vector<int> vec;
|
||||
char* p=buff+i;
|
||||
node* np=root;
|
||||
while(*p!=0)
|
||||
{
|
||||
if(np->next[*p-'a']==NULL) break;
|
||||
np=np->next[*p-'a'];
|
||||
if(np->val!=0) vec.push_back(np->val);
|
||||
p++;
|
||||
}
|
||||
for(int j=0; j<(int)vec.size(); j++)
|
||||
{
|
||||
dp[i]=(dp[i]+dp[i+StringLength[vec.at(j)]])%MOD;
|
||||
}
|
||||
}
|
||||
printf("Case %d: %d\n",_G_cnt,dp[0]);
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user