結果
| 問題 |
No.260 世界のなんとか3
|
| コンテスト | |
| ユーザー |
Chanyuh
|
| 提出日時 | 2019-10-06 23:57:15 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 125 ms / 2,000 ms |
| コード長 | 4,265 bytes |
| コンパイル時間 | 1,173 ms |
| コンパイル使用メモリ | 108,792 KB |
| 実行使用メモリ | 20,140 KB |
| 最終ジャッジ日時 | 2024-10-11 20:39:53 |
| 合計ジャッジ時間 | 3,877 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 |
コンパイルメッセージ
main.cpp:42:29: warning: built-in function ‘pow10’ declared as non-function [-Wbuiltin-declaration-mismatch]
42 | ll memo[10010][24][2][2][2],pow10[10010];
| ^~~~~
ソースコード
#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<complex>
#include<bitset>
#include<stack>
#include<unordered_map>
#include<utility>
#include<tuple>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = (ll)1000000007 * 1000000007;
typedef pair<int, int> P;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define Per(i,sta,n) for(int i=n-1;i>=sta;i--)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef long double ld;
typedef complex<ld> Point;
const ld eps = 1e-8;
const ld pi = acos(-1.0);
typedef pair<ll, ll> LP;
string a,b;
int m;
ll memo[10010][24][2][2][2],pow10[10010];
ll dp(int i,int r,int flagX,int flagY,int flagZ){
if (i==-1){
if (r==0 && flagX==0 && flagY==0 && flagZ==0) return 1;
return 0;
}
if(memo[i][r][flagX][flagY][flagZ]!=-1) return memo[i][r][flagX][flagY][flagZ];
ll res=0;
int p=a[i]-'0',q=b[i]-'0';
if (flagX==0 && flagY==0){
if (p==q) {
if (p!=3) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,0)+dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,1);
}
}
if (flagX==1 && flagY==0){
if (q!=3) res+=dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,1,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,1,0,0)+dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,1,0,1);
if (p<q){
if (q!=3) res+=dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,0,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,0,0,0)+dp(i-1,(r-q*pow10[m-i-1]+24*24)%24,0,0,1);
}
}
if (flagX==0 && flagY==1){
if (p!=3) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,1,flagZ);
else if (flagZ) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,1,0)+dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,1,1);
if (p<q){
if (p!=3) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,0)+dp(i-1,(r-p*pow10[m-i-1]+24*24)%24,0,0,1);
}
}
if (flagX==1 && flagY==1){
rep(k,10){
if (k!=3) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,1,flagZ);
else if (flagZ) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,1,0)+dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,1,1);
}
rep(k,q){
if (k!=3) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,0,0)+dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,1,0,1);
}
Rep(k,p+1,10){
if (k!=3) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,1,flagZ);
else if (flagZ) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,1,0)+dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,1,1);
}
Rep(k,p+1,q){
if (k!=3) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,0,flagZ);
else if (flagZ) res+=dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,0,0)+dp(i-1,(r-k*pow10[m-i-1]+24*24)%24,0,0,1);
}
}
//cout << i << " " << r << " " << flagX << " " << flagY << " " << flagZ << " " << res << endl;
memo[i][r][flagX][flagY][flagZ]=res%mod;
return memo[i][r][flagX][flagY][flagZ];
}
void solve(){
cin >> a >> b;
m=b.length();
rep(i,m+1){
rep(r,24){
rep(flagX,2){
rep(flagY,2){
rep(flagZ,2){
memo[i][r][flagX][flagY][flagZ]=-1;
}
}
}
}
}
pow10[0]=1;
rep(i,m){
pow10[i+1]=pow10[i]*10;
pow10[i+1]%=24;
}
if (a.length()>m) {
cout << 0 << endl;
return;
}
string s="";
rep(i,m-a.length()) s+="0";
a=s+a;
//cout << a << endl;
//cout << b << endl;
ll ans=0;
Rep(i,1,24){
if (i%8!=0) {
rep(flagX,2){
rep(flagY,2){
ans+=dp(m-1,i,flagX,flagY,1);
}
}
}
if (i%3==0) {
rep(flagX,2){
rep(flagY,2){
ans+=dp(m-1,i,flagX,flagY,0);
}
}
}
ans%=mod;
}
cout << ans << endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout << fixed << setprecision(50);
solve();
}
Chanyuh