您的位置:首页 > 其它

POJ 3630 Phone List

2009-10-05 13:16 323 查看
/*

Trie树,一开始用的class, new, delete等面向对象的东西,结果TLE

后来改用数组实现就OK了

这题只需要insert操作,无需search操作,边插入边判断就OK了

*/

#include <iostream>

#define MAX_N 120000

using namespace std;

int trieTree[MAX_N + 1][12]; //第10位是ID,第11位是count

int countv = 0;

bool insert(char phone[], int id)

{

int curNode = 0, i, next;

char c;

for(i = 0; i < strlen(phone); i++)

{

c = phone[i];

trieTree[curNode][11]++;

next = trieTree[curNode][c - '0'];

if(next == 0)

trieTree[curNode][c- '0'] = next = ++countv;

curNode = next;

if(trieTree[curNode][10] != 0)

return false;

}

if(trieTree[curNode][11] > 0)

return false;

trieTree[curNode][10] = id;

return true;

}

int main()

{

int caseNum, c, i, pNum;

char temp[10];

scanf("%d", &caseNum);

for(c = 0; c < caseNum; c++)

{

memset(trieTree, 0, sizeof(trieTree));

countv = 0;

scanf("%d", &pNum);

bool can = true;

for(i = 0; i < pNum; i++)

{

scanf("%s", temp);

if(can)

if(!insert(temp, i + 1))

can = false;

}

if(can)

printf("YES/n");

else

printf("NO/n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: