# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
22845 | 2017-04-30T07:51:02 Z | past future present(#977, kazel, pjh0123, nemo) | Joyful KMP (KRIII5_JK) | C++14 | 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
# | 결과 | 실행 시간 | 메모리 | 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 | - |