結果
| 問題 |
No.260 世界のなんとか3
|
| コンテスト | |
| ユーザー |
tsutaj
|
| 提出日時 | 2017-07-14 09:33:56 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 82 ms / 2,000 ms |
| コード長 | 1,224 bytes |
| コンパイル時間 | 1,665 ms |
| コンパイル使用メモリ | 170,932 KB |
| 実行使用メモリ | 11,136 KB |
| 最終ジャッジ日時 | 2024-10-07 20:38:41 |
| 合計ジャッジ時間 | 3,697 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a; i<n; i++)
#define repq(i,a,n) for(int i=a; i<=n; i++)
#define repr(i,a,n) for(int i=a; i>=n; i--)
typedef long long int ll;
typedef pair<int, int> pii;
template<typename T> void chmax(T &a, T b) {a = max(a, b);}
template<typename T> void chmin(T &a, T b) {a = min(a, b);}
constexpr ll MOD = 1000000007LL;
// digit, mod3, has3, mod8, flag
ll dp[10010][3][2][8][2];
ll solve(string s, int less) {
memset(dp, 0, sizeof(dp));
dp[0][0][0][0][0] = 1;
int N = s.length();
rep(i,0,N) rep(j,0,3) rep(k,0,2) rep(l,0,8) rep(f,0,2) {
int lim = f ? 9 : s[i] - '0';
rep(x,0,lim + 1) {
int mo3 = (j + x) % 3;
int mo8 = (l * 10 + x) % 8;
(dp[i+1][mo3][k || x == 3][mo8][f || x < lim] += dp[i][j][k][l][f]) %= MOD;
}
}
ll ret = 0;
rep(j,0,3) rep(k,0,2) rep(l,0,8) rep(f,0,2) {
if(less == 1 && f == 0) continue;
if((j == 0 || k == 1) && l != 0) (ret += dp[N][j][k][l][f]) %= MOD;
}
return ret;
}
int main() {
string A, B; cin >> A >> B;
ll ra = solve(A, 1), rb = solve(B, 0);
cout << (rb - ra + MOD) % MOD << endl;
return 0;
}
tsutaj