标签:des style http color os io strong for ar
Phone ListCrawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
2 3 911 97625999 91125426 5 113 12340 123440 12345 98346
Sample Output
NO YES题意:看是否有相同的前缀,如果有输出NO,没有输出YESps:注意要释放内存。#include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> #include <iostream> using namespace std; struct node { int flag; struct node *next[10]; }tree; struct node *root; void create_tree(char *str) { int i,j; int len=strlen(str); struct node*p=root, *q; for(i=0;i<len;i++) { int id=str[i]-'0'; if(p->next[id]==NULL) { q=(struct node*)malloc(sizeof(struct node)); q->flag=1;//初始的flag==1; for(j=0;j<10;j++) q->next[j]=NULL; p->next[id]=q; p=p->next[id]; } else { p->next[id]->flag++; p=p->next[id]; } } p->flag=-1;//若为结尾,则将v改成-1表示 } int find_tree(char *str) { int i; int len=strlen(str); struct node *p=root; for(i=0;i<len;i++) { int id=str[i]-'0'; p=p->next[id]; if(p==NULL)//若为空集,表示不存以此为前缀的串 return 0; if(p->flag==-1)//字符集中已有串是此串的前缀 return -1; } return -1;//此串是字符集中某串的前缀 } int freedom(struct node * T)//释放空间 { int i; if(T==NULL) return 0; for(i=0;i<10;i++) { if(T->next[i]!=NULL) freedom(T->next[i]); } free(T); return 0; } int main() { char str[20]; int n,m,i,j; int flag; scanf("%d", &n); while(n--) { flag=0; root=(struct node *)malloc(sizeof(struct node)); for(i=0;i<10;i++) root->next[i]=NULL; root->flag=0; scanf("%d", &m); while(m--) { scanf("%s",str); if(find_tree(str)==-1) flag=1; if(flag) continue; create_tree(str); } if(flag) printf("NO\n"); else printf("YES\n"); freedom(root); } return 0; }
标签:des style http color os io strong for ar
原文地址:http://blog.csdn.net/u013486414/article/details/38894845