Submission #22845

# Submission time Handle Problem Language Result Execution time Memory
22845 2017-04-30T07:51:02 Z past future present(#977, kazel, pjh0123, nemo) Joyful KMP (KRIII5_JK) C++14
0 / 7
1000 ms 10880 KB
#include<stdio.h>
#include<string.h>

using ll = long long;
const int mod = 1e9 + 7;
char s[1000005], ans[1000005];
int n, ff[1000005];


void calculate_pi() {
    ff[0] = -1;
    for (int i = 1, j = -1; i < n; i++) {
        while (j >= 0 && s[i] != s[j + 1]) j = ff[j];
        if (s[i] == s[j + 1])
            ff[i] = ++j;
        else
            ff[i] = -1;
    }
}

int pt[1000005], psz;

int main()
{
    ll k;
    scanf("%s%lld", s,&k);
    n = strlen(s);

    int num = 26;
    for (int i = 1, j=-1; i < n; i++){
        char orig = s[i];
        int origj = j;

        while(j >=0 && s[i] != s[j+1]) j=ff[j];
        if(s[i]==s[j+1]) ff[i] = ++j;
        else ff[i] = -1;

        int afterj = j;
        if(ff[i] == -1){
            ll c = 0;
            for(int ii=0;ii<26;ii++){
                s[i] = 'a'+ii;
                j = origj;

                while(j >=0 && s[i] != s[j+1]) j=ff[j];
                if(s[i]==s[j+1]) ff[i] = ++j;
                else ff[i] = -1;
                
                if(ff[i] == -1)c++;
            }

            num = num*c%mod;
            pt[++psz] = i;
        }
        j = afterj;
        s[i] = orig;
        ff[i] = -1;
    }
    printf("%d\n", num);
    k--;
    for (int j = psz; j >= 0; j--)
    {
        ans[pt[j]] = 'a' + k % 25;
        k /= 25;
    }
    if (k > 0)
    {
        puts("OVER");
        return 0;
    }
    for (int i = 1; i < n; i++)
    {
        if (ans[i])
        {
            if (ans[i] >= ans[0]) ans[i]++;
            continue;
        }
        ans[i] = ans[ff[i]];
    }
    puts(ans);
}

Compilation message

JK.cpp: In function 'int main()':
JK.cpp:26:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s%lld", s,&k);
                          ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 10880 KB Output is correct
2 Correct 0 ms 10880 KB Output is correct
3 Execution timed out 1000 ms 10880 KB Execution timed out
4 Halted 0 ms 0 KB -