Flying to the Mars
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 18240 Accepted Submission(s): 5877
Problem Description
Input
Input file contains multiple test cases. In a test case,the first line contains a single positive number N indicating the number of soldiers.(0<=N<=3000) Next N lines :There is only one nonnegative integer on each line , indicating the level number for each soldier.( less than 30 digits);
Output
For each case, output the minimum number of broomsticks on a single line.
Sample Input
4
10
20
30
04
5
2
3
4
3
4
Sample Output
1
2
Author
PPF@JLU
题意:
速度大小递增的分在一个集合里,即速度大小不同的才能在一个集合里,问最少分几个集合。
代码:
1 //本质就是找最多有多少相同的数字。处理前导零,还有这个数就是0的情况;又糊涂了,竟然把每个经过的点都加了一,只加最后一个才能标记一个数啊!!! 2 #include3 #include 4 #include 5 #include 6 using namespace std; 7 struct Trie 8 { 9 int v;10 Trie *next[10];11 };12 Trie *root;13 void init()14 {15 root=new Trie;16 for(int i=0;i<10;i++)17 root->next[i]=NULL;18 root->v=0;19 }20 int Tinsert(char s[])21 {22 int len=strlen(s),j=0;23 Trie *p=root,*q;24 for(int i=0;i next[id]==NULL)36 {37 q=new Trie;38 q->v=0;39 for(int i=0;i<10;i++)40 q->next[i]=NULL;41 p->next[id]=q;42 }43 p=p->next[id];44 }45 p->v++;46 return p->v;47 }48 void Tdelete(Trie *t)49 {50 if(t==NULL)51 return;52 for(int i=0;i<10;i++)53 if(t->next[i]!=NULL)54 Tdelete(t->next[i]);55 free(t);56 }57 int main()58 {59 int n;60 char ch[33];61 while(scanf("%d",&n)!=EOF)62 {63 init();64 int ans=0;65 for(int i=0;i ans) ans=tem;70 }71 printf("%d\n",ans);72 Tdelete(root);73 }74 return 0;75 }