记录编号 186569 评测结果 AAAAAAAAAA
题目名称 [NOIP 2011]统计单词数 最终得分 100
用户昵称 Gravatardevil 是否通过 通过
代码语言 C++ 运行时间 0.154 s
提交时间 2015-09-13 16:10:46 内存使用 1.27 MiB
显示代码纯文本
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <map>
  8. #include <stack>
  9. #include <queue>
  10. #include <ctime>
  11. #include <algorithm>
  12. using namespace std;
  13. typedef long long ll;
  14. typedef long double ld;
  15. typedef unsigned int uint;
  16. const int inf=1061109567;
  17. const int maxn=1000010;
  18. const int maxm=21;
  19. const int mod=10007;
  20.  
  21. char a[maxn];
  22. char b[maxm];
  23. int alen,blen;
  24. int next[maxm];
  25. int cnt,pos;
  26.  
  27. void get_next()
  28. {
  29. int i=0,j=-1;
  30. next[0]=-1;
  31. while(i<blen)
  32. {
  33. while(j!=-1&&b[i]!=b[j]) j=next[j];
  34. i++;j++;next[i]= (b[i]!=b[j]) ? j : next[j];
  35. //next[i]=j;
  36. }
  37. }
  38.  
  39. void KMP()
  40. {
  41. get_next();
  42. int i=0,j=0;
  43. cnt=0,pos=-1;
  44. while(i<alen)
  45. {
  46. while(j!=-1&&a[i]!=b[j]) j=next[j];
  47. i++;j++;
  48. if(j==blen)
  49. {
  50. if(pos==-1) pos=i-j;
  51. cnt++;
  52. }
  53. }
  54. }
  55.  
  56. int main()
  57. {
  58. freopen("stat.in","r",stdin);
  59. freopen("stat.out","w",stdout);
  60. //clock_t st=clock();
  61. int i=1;
  62. while(scanf("%c",&b[i])==1&&b[i]!='\n')
  63. {
  64. if(b[i]>='A'&&b[i]<='Z') b[i]=b[i]-'A'+'a';
  65. i++;
  66. }
  67. b[0]=b[i]=' ';blen=i+1;i=1;
  68. while(scanf("%c",&a[i])==1)
  69. {
  70. if(a[i]>='A'&&a[i]<='Z') a[i]=a[i]-'A'+'a';
  71. i++;
  72. }
  73. a[0]=a[i]=' ';alen=i+1;
  74. //printf("%d %d\n",alen,blen);
  75. KMP();
  76. if(cnt==0) printf("-1\n");
  77. else printf("%d %d\n",cnt,pos);
  78. //clock_t ed=clock();
  79. //printf("\nTime used : %.7lf Ms\n",double(ed-st)/CLOCKS_PER_SEC);
  80. return 0;
  81. }