fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <map>
  4.  
  5. using namespace std;
  6.  
  7. const int MAXLEN = 1000; // максимальная длина всех строк
  8. const int inf = 1000;
  9.  
  10. struct vertex {
  11. map <char, int> next;
  12. bool leaf;
  13. };
  14.  
  15. int sz, len;
  16. vertex tr[MAXLEN];
  17.  
  18. void init_trie () {
  19. sz = 0;
  20. for (int i = 0; i < MAXLEN; ++i) {
  21. tr[i].next.clear ();
  22. tr[i].leaf = false;
  23. }
  24. sz++;
  25. }
  26.  
  27. void add_string (string s) {
  28. int v = 0;
  29. for (int i = 0; i < s.length (); ++i) {
  30. if (!tr[v].next.count (s[i])) {
  31. tr[v].next[s[i]] = sz++;
  32. }
  33. if (tr[v].next.size () > 1) {
  34. len = min(len, i);
  35. }
  36. v = tr[v].next[s[i]];
  37. }
  38. len = min(len, (int)s.length ());
  39. tr[v].leaf = true;
  40. }
  41.  
  42. main () {
  43. int n;
  44. cin >> n;
  45. init_trie();
  46. len = inf;
  47. for (int i = 0; i < n; ++i) {
  48. string s;
  49. cin >> s;
  50. add_string (s);
  51. cout << len << "\n";
  52. }
  53. }
  54.  
Success #stdin #stdout 0s 3464KB
stdin
4
abcd
abc
abcd
aa
stdout
4
3
3
1