精华内容
下载资源
问答
  • using namespace std; void fun1() { std::string name = "bird.png"; for (int i = 1; i < name.length(); i++ ) { if (name[i] == '.') { name = name.substr(0, i)...
    #include <iostream>
    using namespace std;
    
    void fun1()
    {
         std::string name = "bird.png";
    	for (int i = 1; i < name.length(); i++ )
    	{
    		if (name[i] == '.')
    		{
    			name = name.substr(0, i);
    			break;
    		}
    	}
    	cout<<name<<endl;
    }
    
    void fun2()
    {
         char s[50] = "";
        for(int i = 1; i <= 10; i++ )
        {
             sprintf(s, "%02d", i);
             cout << "bird" << s << ".png"<<endl;
        }
    }
    
    
    int main()
    {
       fun1();
       fun2();
       return 0;
    }
    

     

    展开全文
  • 倒序建立后缀自动机的fail树就是后缀树,dfs后缀树得到后缀数组 #include <bits/stdc++.h> using namespace std; int last,dis[200001],val[200001],cnt,a[200001][26],fa[200001],sa[200001],n,sta...

    倒序建立后缀自动机的fail树就是后缀树,dfs后缀树得到后缀数组

    #include <bits/stdc++.h>
    using namespace std;
    
      int last,dis[200001],val[200001],cnt,a[200001][26],fa[200001],sa[200001],n,sta[200001],top;
      int tr[200001][26],rank[200001],height[200001];
      char st[200001];
    
      void ins(int num,int pos){
          int p=last,np=last=++cnt;
          dis[np]=dis[p]+1;val[np]=pos;
          while (!a[p][num]&&p) a[p][num]=np,p=fa[p];
          if (!p) fa[np]=1;else{
            int q=a[p][num];
            if (dis[p]+1==dis[q]) fa[np]=q;else{
              int nq=++cnt;dis[nq]=dis[p]+1;
              memcpy(a[nq],a[q],sizeof(a[q]));
              fa[nq]=fa[q];
              fa[q]=fa[np]=nq;
              while (a[p][num]==q) a[p][num]=nq,p=fa[p];
          }
        }
      }
      
      void dfs1(int po){
        for (int i=0;i<26;i++)
          if (a[po][i]&&dis[a[po][i]]==dis[po]+1){
            sta[++top]=i;
            tr[fa[a[po][i]]][sta[dis[a[po][i]]-dis[fa[a[po][i]]]]]=a[po][i];//确定后缀树的出边
            dfs1(a[po][i]);
            top--;
          }
      }
      
      void dfs2(int po){
        if (val[po]) sa[++cnt]=val[po];
        for (int i=0;i<26;i++)
          if (tr[po][i])
            dfs2(tr[po][i]);
      }
      
      void getheight(){
          int k=0;
          int po1,po2;
          for (int i=1;i<=n;i++){
              po1=i,po2=sa[rank[i]-1];
              if (k) k--;
              while ((st[po1+k]==st[po2+k])&&(po1+k<=n)&&(po2+k<=n))
              k++;
              height[rank[i]-1]=k;
          }
      }
      
      int main(){      
        scanf("%s",st+1);
        n=strlen(st+1);
        last=cnt=1;
        for (int i=n;i>=1;i--)
          ins(st[i]-'a',i);
        
        dfs1(1);
        cnt=0;
        dfs2(1);
        for (int i=1;i<=n;i++) rank[sa[i]]=i;
        getheight();
        
        for (int i=1;i<=n;i++) printf("%d ",sa[i]);printf("\n");
        for (int i=1;i<n;i++) printf("%d ",height[i]);
      }

     

    转载于:https://www.cnblogs.com/zhujiangning/p/7999381.html

    展开全文
  • 后缀排序

    2019-10-08 07:33:10
    后缀自动机(不会点这里) 加入节点的时候记录一下这个点是不是代表后缀。建完以后重建一下后缀树在上面dfs就可以了= =(注意重建的时候是字典序排序,不是拓扑序 ...using namespace std; struct Node{ int fa,...

    后缀自动机(不会点这里

    加入节点的时候记录一下这个点是不是代表后缀。建完以后重建一下后缀树在上面dfs就可以了= =(注意重建的时候是字典序排序,不是拓扑序

    由于空间的关系,用map

    #include<bits/stdc++.h>
    #define N 2000007
    using namespace std;
    struct Node{
        int fa,val,ri;
        map<int,int> c;
    }T[N];
    int tot=1,last=1,np,nq,q,p[N],ans[N],tog,head[N],net[N],fall[N],len,c[67],id[N],Tot;
    char ch[N];
    inline int gs(char c){
        if ('0'<=c&&c<='9') return c-'0';
        if ('A'<=c&&c<='Z') return c-'A'+10;
        if ('a'<=c&&c<='z') return c-'a'+36;  
    }
    void write(int x) {
        if (x<10) {putchar('0'+x); return;} write(x/10),putchar('0'+x%10);
    }
    inline void writel(int x){
        write(x),putchar(' ');
    }
    inline void Sam(int x,int y){
        np=++tot;
        T[np].ri=T[np].val=T[last].val+1;
        for (;last&&!T[last].c[x];last=T[last].fa) T[last].c[x]=np;
        if (!last) T[np].fa=1;
        else {
            q=T[last].c[x];
            if (T[last].val+1==T[q].val) T[np].fa=q;
            else {
                nq=++tot; T[nq]=T[q];
                T[nq].val=T[last].val+1;
                T[q].fa=T[np].fa=nq;
                for(;last&&T[last].c[x]==q;last=T[last].fa) T[last].c[x]=nq;
            }
        }
        p[np]=y; last=np; 
    }
    inline void add(int x,int y) {
        fall[++Tot]=y; net[Tot]=head[x]; head[x]=Tot;
    }
    void dfs(int x){
        if (p[x]) ans[++tog]=p[x];
        for (int i=head[x];i;i=net[i]) dfs(fall[i]);
    }
    int main() {
    //    freopen("b.in","r",stdin);
        scanf("%s",ch); len=strlen(ch); 
        for (int i=len-1;~i;i--)
          ch[i]=gs(ch[i]),Sam(ch[i],i+1);
        for (int i=tot;i;i--) c[ch[len-T[i].ri+T[T[i].fa].val]]++;
        for (int i=1;i<=64;i++) c[i]+=c[i-1];
        for (int i=1;i<=tot;i++) id[c[ch[len-T[i].ri+T[T[i].fa].val]]--]=i;
        for (int i=tot;i;i--) add(T[id[i]].fa,id[i]);
        dfs(1);
        for (int i=1;i<=len;i++) writel(ans[i]);
        return 0;
    }

     

    转载于:https://www.cnblogs.com/rrsb/p/8276987.html

    展开全文
  • 后缀数组

    2019-05-21 16:59:20
    后缀数组 Suffix Array 将字符串S的所有后缀按字典序排序后得到的数组#include #include #include #include #include using namespace std; const int MAXN = 100; int n, k; int ranks
    展开全文
  • using namespace std

    2014-05-16 07:06:14
    using namespace std 编辑 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 目录 1区别介绍 ...前者没有后缀
  • 后缀表达式

    2020-10-18 14:45:56
    题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑...using namespace std; char c[5]; int main().
  • using namespace std

    2019-06-23 18:01:29
    C++标准为了和C区别开,也为了正确地使用命名空间,规定头文件不使用后缀.h。因此,当使用<iostream.h>时,相当于在C中调用库函数,使用的是全局命名空间 当使用时,该头文件没有定义全局命名空间,必须使用...
  • 关于后缀自动机SAM,贴一个非常好的讲解:后缀自动机学习小记 代码交洛谷模板可A ...using namespace std; const int N=1e6+5; char s[N]; int sa[N],t1[N],t2[N],c[N]; int n,m=555; void su...
  • C++ using namespace std

    2019-09-19 22:07:28
    C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 一 : <iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者...
  • 后缀自动机

    2018-03-10 11:17:40
    P3809 【模板】后缀排序 #include&lt;bits/stdc++.h&gt; #define N 1000010 using namespace std; int x[N],y[N],sa[N],h[N],rk[N],c[10*N],a[N]; char s[N]; int m,n; void calcsa(int n,int m){ ...
  • 关于后缀表达式的计算机求值以及中缀表达式转后缀表达式的分析请看我的另一篇博客——中缀表达式转前、后缀表达式及其求值后缀表达式求值#include<iostream> #include #include #include<cctype> #include using ...
  • using namespace std 详解

    千次阅读 2013-07-26 18:10:41
    namespace std 一 : 和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。  后缀为.h的头文件c++标准已经明确提出不支持了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,182
精华内容 1,272
热门标签
关键字:

后缀std