| ||||||||||
| 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 | |||||||||
....ke chi de zhan dai ma
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#define maxn 1001
using namespace std;
char st[maxn][21], res[maxn][21];
class Trie {
public:
Trie *next[26];
int flag;
Trie() {
for (int i = 0; i < 26; i++)
next[i] = 0; flag = 0;
}
void build() {
root = new Trie;
}
void insert(char *st) {
int ans, len;
Trie *p, *q;
p = root;
len = strlen(st);
for (int i = 0; i < len; i++) {
ans = st[i] - 'a';
if (p -> next[ans] == NULL)
p -> next[ans] = new Trie;
p = p -> next[ans]; p -> flag++;
}
}
void find(char *st, char *res) {
int len, ans;
Trie* p;
p = root;
len = strlen(st);
for (int i = 0; i < len; i++) {
ans = st[i] - 'a';
p = p -> next[ans];
res[i] = st[i];
if (p -> flag == 1) {
res[++i] = '\0'; return;
}
}
}
private:
Trie *root;
} Ans;
int main() {
int n = 0;
Ans.build();
while (~scanf("%s", st[n])) {
//if (st[n][0] == '.') break;
Ans.insert(st[n]); n++;
}
for (int i = 0; i < n; i++)
Ans.find(st[i], res[i]);
for (int i = 0; i < n; i++)
printf("%s %s\n", st[i], res[i]);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator