zoukankan      html  css  js  c++  java
  • 2017.03.04 考试总结

    今天本来是后缀数组和平衡树考试的,昨天做了一天的平衡树

    结果就只考了一个没学过的后缀平衡树(2333);

    今天学没学过后缀数组并没有什么意义,大部分都可以用哈希做。

    不得不说哈希真的是解决字符串问题的利器。。。

    具体哈希的实现如下。。。自己模拟即可。。。

    预处理:

    1   pre[0]=1;for(int i=1;i<=100050;i++) pre[i]=pre[i-1]*29;
    2   len=strlen(a+1);
    3   for(int i=1;i<=len;i++) hsh[i]=hsh[i-1]*29+a[i]-'a'+1;

    提取其中任意一段:

    1 ll cal(int l,int r)
    2 {
    3   return hsh[r]-hsh[l-1]*pre[r-l+1];
    4 }

    T1.加一个最优性剪枝,n^3变成萎O(n)--O(n^2);

    就是这样:

    1   for(int i=1;i<=len;i++)
    2     {
    3       for(int j=1;j<=len-i+1;j++)
    4      {
    5         if((len-i+1)/j>ans) ans=max(ans,work(i,j));
    6         else break;
    7      }                     
    8     }

    T2完全不会。。。但并没有去打暴力,其实暴力2^n是有分的,错误的太小看暴力了。。。%%%cjk自己YY。。。

    现在这题只是模模糊糊的懂一点。。。

    T3 考虑到只在字符串的最后有添加和删除操作,所以对前面都没有影响。

    那么直接把他加进来的贡献O(N)的算即可,我怕桶判段哈希有冲突就直接上了map,复杂度变成标准n^2*logn;60分

     1 for(int i=1;i<=n;i++)
     2     {
     3       if(b[i]=='-')
     4       {
     5     for(int j=1;j<=tot;j++)
     6     {
     7       int v=cal(j,tot);vis[v]--;
     8       if(vis[v]==0) ans--;
     9     }
    10     tot--;
    11       }
    12       else
    13       {
    14     a[++tot]=b[i],hsh[tot]=hsh[tot-1]*29+b[i]-'a'+1;
    15     for(int j=1;j<=tot;j++)
    16      {
    17        int v=cal(j,tot);vis[v]++;
    18        if(vis[v]==1) ans++;
    19      }
    20       }
    21       printf("%lld
    ",ans);
    22     }

    这次考试并不代表水平,因为乱搞就有很高的部分分。。。。

    以后要多练习自己打非完美算法的能力,毕竟省选题能AC的是极少数。。。

    这周的码量真的大,几乎是平常的两到三倍,下周要多练点思维了。。。不然人都蠢了。。。

  • 相关阅读:
    SQL 存储过程入门(五)
    QT程序崩溃原因示例和分析
    全志(allwinner)编译过程问题与解决方法汇总
    rust Linux环境下开发环境安装 和 IDE工具 EMACS配置
    DMZ
    什么是浮动IP
    PLMN和PSTN
    人生 -- 有感于近期的一个事件
    职场四原则
    Fatal error compiling: java.lang.NoSuc hFieldError??
  • 原文地址:https://www.cnblogs.com/qt666/p/6508282.html
Copyright © 2011-2022 走看看