zoukankan      html  css  js  c++  java
  • bzoj2251 [2010Beijing Wc]外星联络

      因为n很小,所以对于串s的每一个后缀,都把其加入字典树中,并且经过一个字典树节点,该节点权值就+1。

      输出时因为要字典序最小,所以字典树先走0分叉,再走1分叉,如果节点权值大于等于2就输出

      代码

     1 #include<cstdio>
     2 const int N  = 5001010;
     3 int n,sum[N],f[N][2],tot,i;
     4 char s[N];
     5 void gao(int x)
     6 {
     7     int t=0,i;
     8     for (i=x;i<n;i++)
     9     {
    10         if (f[t][s[i]-48]==0)
    11         f[t][s[i]-48]=++tot;
    12         t=f[t][s[i]-48];
    13         sum[t]++;
    14     }
    15 }
    16 void out(int x)
    17 {
    18     if (sum[x]>1)
    19     printf("%d
    ",sum[x]);
    20     if (f[x][0]) out(f[x][0]);
    21     if (f[x][1]) out(f[x][1]);
    22 }
    23 int main()
    24 {
    25     scanf("%d",&n);
    26     scanf("%s",s);
    27     for (i=0;i<n;i++)
    28     gao(i);
    29     out(0);
    30 } 
  • 相关阅读:
    Alpha项目冲刺_博客链接合集
    项目系统设计
    项目需求分析
    项目选题
    项目展示
    原型设计 + 用户规格说明书
    测试与优化
    结对作业1
    MathExam6317
    js入门基础
  • 原文地址:https://www.cnblogs.com/fzmh/p/5510235.html
Copyright © 2011-2022 走看看