POJ 3630 Phone List

/*
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;
}

你可能感兴趣的:(c,list,delete,search,Class,insert)