| ||||||||||
| 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 | |||||||||
真是见鬼了,把char 数组放在全局开个1001过了,放在局部得开10001个。活见鬼,这题真是奇葩了。#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn = 2000 * 20 + 1;
const int sig_size = 26;
struct trie{
int ch[maxn][sig_size];
int hz[maxn][sig_size];
int val[maxn];
int sz;
void init(){
sz = 1;
memset(hz, 0, sizeof(hz));
memset(ch, 0, sizeof(ch));
memset(val, 0, sizeof(val));
}
void insert( char s[][22] , int start, int v){
int u = 0;
int len = strlen(s[start]);
for (int i = 0; i<len; i++){
int c = s[start][i] - 'a';
if (!ch[u][c]){
memset(ch[sz], 0, sizeof(ch[sz]));
val[sz] = 0;
ch[u][c] = sz++;
}
hz[u][c]++;
u = ch[u][c];
}
val[u] = v;
}
int query(char s[][22], int start){
int u = 0;
int len = strlen(s[start]);
for (int i = 0; i < len; i++){
int c = s[start][i] - 'a';
if ( hz[u][c] == 1 )return i;
//if(i==len-1)return i;
u = ch[u][c];
}
return len-1;//我本来写的是if(i==len-1) return i,这句本来是没有的总是WA,就把上面这句注释掉,写了这句。但我感觉应该一样啊,除非有len=0,没进循环,应该不会呀。见鬼了。见鬼了。
}
} node;
int main(){
char input[10001][22];
node.init();
int cas = 0;
while ( scanf("%s", input[cas]) != EOF){
node.insert(input, cas , 1);
++cas;
}
for(int i=0;i<=cas;i++){
cout<<input[i]<<" ";
for(int j=0;j<=node.query(input,i);j++){
printf("%c",input[i][j]);
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator