Submission #2496246


Source Code Expand

#include<cstdio>
#include<cstring>
using namespace std;

const int N = 3*1e5+10;

char s[N];
int root,last,sz,ch[N][26],fa[N],sum[N],l[N];
void add(int x) {
    int c=s[x]-'a';
    int p=last,np=++sz; last=np;
    l[np]=x+1;
    for(;p&&!ch[p][c];p=fa[p]) ch[p][c]=np;
    if(!p) fa[np]=root;
    else {
        int q=ch[p][c];
        if(l[p]+1==l[q]) fa[np]=q;
        else {
            int nq=++sz; l[nq]=l[p]+1;
            memcpy(ch[nq],ch[q],sizeof(ch[q]));
            fa[nq]=fa[q];
            fa[np]=fa[q]=nq;
            for(;p&&q==ch[p][c];p=fa[p]) ch[p][c]=nq;
        }
    }
}

int n,m,b[N],cnt[N];

void get_sum() {
    for(int i=1;i<=sz;i++) cnt[l[i]]++;
    for(int i=1;i<=n;i++) cnt[i]+=cnt[i-1];
    for(int i=1;i<=sz;i++) b[cnt[l[i]]--]=i;
    for(int i=sz;i;i--) {
        int p=b[i]; sum[p]=1;
        for(int j=0;j<26;j++)
            sum[p]+=sum[ch[p][j]];
    }
}

int main() {
    scanf("%s",s);
    n=strlen(s);
    root=last=++sz;
    for(int i=0;i<n;i++) add(i);
    get_sum();
    m=1;
    while(m--) {
        int x,p=root; scanf("%d",&x);
        while(x) {
            for(int c=0;c<26;c++)if(ch[p][c]) {
                if(sum[ch[p][c]]>=x) {
                    putchar('a'+c);
                    x--; p=ch[p][c];
                    break;
                }
                else x-=sum[ch[p][c]];
            }
        }
        puts("");
    }
    return 0;
}

Submission Info

Submission Time
Task C - K-th Substring
User Vexoben
Language C++14 (GCC 5.4.1)
Score 300
Code Size 1460 Byte
Status AC
Exec Time 2 ms
Memory 6400 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:42:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s",s);
                  ^
./Main.cpp:49:37: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         int x,p=root; scanf("%d",&x);
                                     ^

Judge Result

Set Name Sample Subtask All
Score / Max Score 0 / 0 200 / 200 100 / 100
Status
AC × 3
AC × 11
AC × 19
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt
Subtask 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 2_011.txt, 2_012.txt, 2_013.txt, 2_014.txt, 2_015.txt, 2_016.txt, 2_017.txt, 2_018.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 4224 KB
0_001.txt AC 1 ms 4224 KB
0_002.txt AC 1 ms 4224 KB
1_003.txt AC 1 ms 4224 KB
1_004.txt AC 1 ms 4224 KB
1_005.txt AC 1 ms 4224 KB
1_006.txt AC 1 ms 4224 KB
1_007.txt AC 1 ms 4224 KB
1_008.txt AC 1 ms 4224 KB
1_009.txt AC 1 ms 4224 KB
1_010.txt AC 1 ms 4224 KB
2_011.txt AC 2 ms 6400 KB
2_012.txt AC 2 ms 6400 KB
2_013.txt AC 2 ms 6400 KB
2_014.txt AC 2 ms 6400 KB
2_015.txt AC 2 ms 6400 KB
2_016.txt AC 2 ms 6400 KB
2_017.txt AC 2 ms 6400 KB
2_018.txt AC 2 ms 6400 KB