結果
| 問題 | No.260 世界のなんとか3 |
| コンテスト | |
| ユーザー |
37zigen
|
| 提出日時 | 2016-08-25 17:31:20 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,579 bytes |
| 記録 | |
| コンパイル時間 | 3,427 ms |
| コンパイル使用メモリ | 77,544 KB |
| 実行使用メモリ | 51,020 KB |
| 最終ジャッジ日時 | 2024-11-08 02:23:23 |
| 合計ジャッジ時間 | 13,476 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 27 |
ソースコード
package No200番台;
import java.math.BigInteger;
import java.util.Scanner;
public class Q260 {
public static void main(String[] args) {
new Q260().solver();
}
long MOD = 1_000_000_000 + 7;
// 3の倍数⇔各位の数字の和が3で割り切れる。
// 3のつく数→DPで探す?
// 上を満たし、下を満たさない数の数を数える。
// 8の倍数⇔下3けたが8の倍数
void solver() {
Scanner sc = new Scanner(System.in);
BigInteger A = new BigInteger(sc.next());
BigInteger B = new BigInteger(sc.next());
BigInteger ans = BigInteger.ZERO;
ans = A.divide(BigInteger.valueOf(3));
// dp[fool][mod_3][eqA][eqB][digits]
// Aと比べて eqA->0:小さい 1:等しい 2:大きい
// Bと比べてeqB->0:小さい 1:等しい 2:大きい
// mod_3->各桁の数の和のmodulo3
// fool-> 0:3が付いている 1:3が付いていない
// digits :何桁目か
long[][][][][] dp = new long[2][3][3][3][10001];
for (int i = 0; i < 10000; i++) {
if (i % 8 == 0)
continue;
int digits = 0;
int tmp = i;
boolean fool = false;
while (tmp > 0) {
if (tmp % 10 == 3) {
fool = true;
}
tmp /= 10;
digits++;
}
if (fool) {
int eqA = A.divide(BigInteger.valueOf((long) Math.pow(10, digits))).compareTo(BigInteger.valueOf(i))
+ 1;
int eqB = B.divide(BigInteger.valueOf((long) Math.pow(10, digits))).compareTo(BigInteger.valueOf(i))
+ 1;
dp[1][i % 3][eqA][eqB][digits]++;
}
}
}
// long dfs(int digits_number,int MOD_3){
// if(digits_number>3)
// }
}
37zigen