提出 #40051023


ソースコード 拡げる

#include <bits/stdc++.h>
 
#pragma GCC optimization ("O2")
#pragma GCC optimization ("unroll-loops")
 
using namespace std;

long long dp[17][2][17][17][2];
vector < int > lcp;
string s;
string a;
int n , m;
void reset() {
    for(int i = 0;i<17;i++){
        for(int j = 0;j<2;j++){
            for(int k = 0;k<17;k++){
                for(int l = 0;l<17;l++){
                    dp[i][j][k][l][0] = dp[i][j][k][l][1] = -1;
                }
            }
        }
    }
}

vector<int> prefix_function(string s) {
    int n = (int)s.length();
    vector<int> pi(n);
    for (int i = 1; i < n; i++) {
        int j = pi[i-1];
        while (j > 0 && s[i] != s[j])
            j = pi[j-1];
        if (s[i] == s[j])
            j++;
        pi[i] = j;
    }
    return pi;
}

long long memo(int i , int small , int done , int j , int start) {
    
    if(j == m) {
        done++;
        j = lcp[j - 1];
    }
    if(i == n) {
        return done * start;
    }


    long long int &ans = dp[i][small][done][j][start];
    if(ans != -1) {
        return ans;
    }

    ans = 0;

    if(small == 0) {
            if(start == 0) {
                ans += memo(i + 1 , 1 , 0 , 0 , 0);
            }
            int val = (s[0] - '0');
            int nxj = 1;
            if(j) {
                val = s[lcp[j - 1]] - '0';
                nxj = lcp[j - 1] + 1;
            }
            for(int num = (start==0);num<(a[i] - '0');num++) {
                if(num == (s[j] - '0')) {
                    ans += memo(i + 1 , 1, done , j + 1 , 1);
                } else {
                    int nxj = j;
                    while(nxj && num != (s[nxj] - '0')) nxj = lcp[nxj - 1];
                    if(num == (s[nxj] - '0')) nxj++;
                    ans += memo(i + 1 , 1 , done , nxj , 1); 
                }
            }
            if(a[i] == s[j]) {
                ans += memo(i + 1 , 0 , done , j + 1 , 1);
            } else if(a[i] == s[nxj - 1]) {
                ans += memo(i + 1 , 0 , done , nxj , 1);
            } else {
                ans += memo(i + 1 , 0 , done , 0 , 1);
            }
    } else {
            if(start == 0) {
                ans += memo(i + 1 , 1 , done , 0 , 0);
            }
            int val = (s[0] - '0');
            int nxj = 1;
            
            for(int num = (start==0);num<10;num++) {

                if(num == (s[j] - '0')) {
                    ans += memo(i + 1 , 1, done , j + 1 , 1);
                } else {
                    int nxj = j;
                    while(nxj > 0 && num != (s[nxj] - '0')) nxj = lcp[nxj - 1];
                    if(num == (s[nxj] - '0')) nxj++;
                    ans += memo(i + 1 , 1 , done , nxj , 1); 
                }
            }
    }
    return ans;
}

void Solve() {
    
    cin >> s;
    lcp = prefix_function(s);
    long long l , r;
    cin >> l >> r;
    a = to_string(r);
    n = a.size();
    m = s.size();
    reset();
    long long ans = memo(0 , 0 , 0 , 0 , 0);
    //cout << ans << "\n" ;
    if(l > 1) {
        l--;
        a = to_string(l);
        reset();
        n = a.size();
        ans -= memo(0 , 0 , 0 , 0 , 0);
    }
    cout << ans << "\n" ;
}
 
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int test;
    cin >> test;
    for(int i = 0;i<test;i++) {
        Solve();
    }
 
    return 0;
}

提出情報

提出日時
問題 F - substr = S
ユーザ callmepandey
言語 C++ (GCC 9.2.1)
得点 500
コード長 3495 Byte
結果 AC
実行時間 39 ms
メモリ 3832 KiB

コンパイルエラー

./Main.cpp:3: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("O2")
      | 
./Main.cpp:4: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    4 | #pragma GCC optimization ("unroll-loops")
      | 
./Main.cpp: In function ‘long long int memo(int, int, int, int, int)’:
./Main.cpp:61:17: warning: variable ‘val’ set but not used [-Wunused-but-set-variable]
   61 |             int val = (s[0] - '0');
      |                 ^~~
./Main.cpp:88:17: warning: unused variable ‘val’ [-Wunused-variable]
   88 |             int val = (s[0] - '0');
      |                 ^~~
./Main.cpp:89:17: warning: unused variable ‘nxj’ [-Wunused-variable]
   89 |             int nxj = 1;
      |                 ^~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 1
AC × 60
セット名 テストケース
Sample sample_01.txt
All sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 5 ms 3808 KiB
test_01.txt AC 1 ms 3724 KiB
test_02.txt AC 25 ms 3828 KiB
test_03.txt AC 13 ms 3748 KiB
test_04.txt AC 33 ms 3756 KiB
test_05.txt AC 33 ms 3764 KiB
test_06.txt AC 33 ms 3816 KiB
test_07.txt AC 32 ms 3816 KiB
test_08.txt AC 31 ms 3792 KiB
test_09.txt AC 28 ms 3732 KiB
test_10.txt AC 33 ms 3796 KiB
test_11.txt AC 32 ms 3792 KiB
test_12.txt AC 28 ms 3816 KiB
test_13.txt AC 34 ms 3724 KiB
test_14.txt AC 28 ms 3804 KiB
test_15.txt AC 32 ms 3816 KiB
test_16.txt AC 32 ms 3808 KiB
test_17.txt AC 34 ms 3816 KiB
test_18.txt AC 32 ms 3828 KiB
test_19.txt AC 36 ms 3796 KiB
test_20.txt AC 33 ms 3756 KiB
test_21.txt AC 32 ms 3812 KiB
test_22.txt AC 37 ms 3736 KiB
test_23.txt AC 33 ms 3812 KiB
test_24.txt AC 29 ms 3796 KiB
test_25.txt AC 29 ms 3788 KiB
test_26.txt AC 32 ms 3800 KiB
test_27.txt AC 33 ms 3792 KiB
test_28.txt AC 31 ms 3816 KiB
test_29.txt AC 34 ms 3736 KiB
test_30.txt AC 29 ms 3816 KiB
test_31.txt AC 26 ms 3772 KiB
test_32.txt AC 33 ms 3792 KiB
test_33.txt AC 30 ms 3804 KiB
test_34.txt AC 26 ms 3800 KiB
test_35.txt AC 31 ms 3728 KiB
test_36.txt AC 29 ms 3796 KiB
test_37.txt AC 30 ms 3748 KiB
test_38.txt AC 27 ms 3776 KiB
test_39.txt AC 32 ms 3792 KiB
test_40.txt AC 29 ms 3824 KiB
test_41.txt AC 29 ms 3824 KiB
test_42.txt AC 27 ms 3828 KiB
test_43.txt AC 26 ms 3788 KiB
test_44.txt AC 33 ms 3832 KiB
test_45.txt AC 27 ms 3828 KiB
test_46.txt AC 30 ms 3816 KiB
test_47.txt AC 30 ms 3820 KiB
test_48.txt AC 31 ms 3752 KiB
test_49.txt AC 29 ms 3796 KiB
test_50.txt AC 28 ms 3816 KiB
test_51.txt AC 29 ms 3764 KiB
test_52.txt AC 33 ms 3728 KiB
test_53.txt AC 35 ms 3816 KiB
test_54.txt AC 34 ms 3736 KiB
test_55.txt AC 38 ms 3820 KiB
test_56.txt AC 39 ms 3724 KiB
test_57.txt AC 39 ms 3804 KiB
test_58.txt AC 39 ms 3796 KiB
test_59.txt AC 38 ms 3776 KiB