提出 #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 |
| 結果 |
|
|
| セット名 |
テストケース |
| 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 |