Submission #7308117


Source Code Expand

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
const int MN=1e4+4;
char s[5005];int K;
int c[MN][26],step[MN],val[MN],fa[MN],siz[MN],v[MN],rk[MN];
int last,cnt,n;
inline void init()
{
    last=cnt=1;memset(c,0,sizeof c);
    reg int i;
    for(i=1;i<n<<1;++i) val[i]=step[i]=fa[i]=0;
}
void Insert(int x)
{
    int p=last,np=++cnt;step[np]=step[p]+1;val[np]=1;
    for(;p&&!c[p][x];p=fa[p]) c[p][x]=np;
    if(!p) fa[np]=1;
    else 
    {
        int q=c[p][x];
        if(step[q]==step[p]+1) fa[np]=q;
        else 
        {
            int nq=++cnt;step[nq]=step[p]+1;
            memcpy(c[nq],c[q],sizeof c[q]);
            fa[nq]=fa[q];fa[np]=fa[q]=nq;
            for(;c[p][x]==q;p=fa[p]) c[p][x]=nq;
        }    
    }
    last=np;
}
inline void work()
{
    reg int i,j;
    for(i=1;i<=cnt;++i) ++v[step[i]];
    for(i=1;i<=n;++i) v[i]+=v[i-1];
    for(i=1;i<=cnt;++i) rk[v[step[i]]--]=i;
	for(i=2;i<=cnt;++i) val[i]=siz[i]=1;
    val[1]=siz[1]=0;
    for(i=cnt;i;--i)for(j=0;j<26;++j)
		if(c[rk[i]][j])siz[rk[i]]+=siz[c[rk[i]][j]];
}
char ans[MN];int len;
inline void dfs(int x,int k)
{
    if(k<=val[x]) return;k-=val[x];
    reg int i;
    for(i=0;i<26;++i)
        if(k>siz[c[x][i]]) k-=siz[c[x][i]];
        else {ans[len++]=i+'a',dfs(c[x][i],k);break;}
}
int main()
{
    reg int i,k;
    scanf("%s%d",s+1,&k);n=strlen(s+1);
    init();
    for(i=1;i<=n;++i) Insert(s[i]-'a');
    work();
    dfs(1,k),printf("%s",ans);
    return 0;
}

Submission Info

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

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:60:25: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s%d",s+1,&k);n=strlen(s+1);
                         ^

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 2 ms 1280 KB
0_001.txt AC 2 ms 1280 KB
0_002.txt AC 2 ms 1280 KB
1_003.txt AC 2 ms 1280 KB
1_004.txt AC 2 ms 1280 KB
1_005.txt AC 2 ms 1280 KB
1_006.txt AC 2 ms 1280 KB
1_007.txt AC 2 ms 1280 KB
1_008.txt AC 2 ms 1280 KB
1_009.txt AC 2 ms 1280 KB
1_010.txt AC 2 ms 1280 KB
2_011.txt AC 2 ms 1408 KB
2_012.txt AC 2 ms 1408 KB
2_013.txt AC 2 ms 1408 KB
2_014.txt AC 2 ms 1408 KB
2_015.txt AC 2 ms 1408 KB
2_016.txt AC 2 ms 1408 KB
2_017.txt AC 2 ms 1408 KB
2_018.txt AC 2 ms 1408 KB