結果
問題 | No.260 世界のなんとか3 |
ユーザー |
![]() |
提出日時 | 2015-08-01 00:06:33 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 629 ms / 2,000 ms |
コード長 | 1,479 bytes |
コンパイル時間 | 2,283 ms |
コンパイル使用メモリ | 77,496 KB |
実行使用メモリ | 57,628 KB |
最終ジャッジ日時 | 2024-11-07 18:01:54 |
合計ジャッジ時間 | 13,175 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
package no260b;import java.math.BigInteger;import java.util.Scanner;public class Main {public static long MOD = 1000000007;public static void main(String[] args) {Scanner sc = new Scanner(System.in);String a = sc.next();String b = sc.next();long bb = aho(b);long aa = aho(new BigInteger(a).subtract(BigInteger.ONE).toString());System.out.println((bb + MOD - aa) % MOD);}public static long aho(String ss) {char[] s = ss.toCharArray();int n = s.length;long[][][][] dp = new long[2][2][24][n+1];dp[0][0][0][0] = 1;for(int i=0;i<n;i++) {for(int j=0;j<24;j++) {for(int k=0;k<2;k++) {LOOP: for(int l=0;l<2;l++) {for(int m=0;m<=9;m++) {int l2;if (l == 0) {if (m + '0' == s[i]) {l2 = 0;}else if(m + '0' < s[i]) {l2 = 1;}else{continue LOOP;}}else{l2 = 1;}int k2 = (k == 1 || m == 3) ? 1 : 0;int j2 = (j * 10 + m) % 24;dp[l2][k2][j2][i+1] += dp[l][k][j][i];}}}}for(int j=0;j<24;j++) {for(int k=0;k<2;k++) {for(int l=0;l<2;l++) {dp[l][k][j][i+1] %= MOD;}}}}long ret = 0;for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {for(int k=0;k<24;k++) {if ((j == 1 || (k % 3 == 0)) && (k % 8 != 0)) {ret += dp[i][j][k][n];if (ret >= MOD) {ret -= MOD;}}}}}return ret;}}