結果
問題 | No.220 世界のなんとか2 |
ユーザー | tamiflu__shrine |
提出日時 | 2015-06-22 20:45:38 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 1,604 bytes |
コンパイル時間 | 483 ms |
コンパイル使用メモリ | 59,688 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-07 16:42:44 |
合計ジャッジ時間 | 1,066 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 1 ms
6,940 KB |
testcase_03 | AC | 2 ms
6,940 KB |
testcase_04 | AC | 1 ms
6,940 KB |
testcase_05 | AC | 1 ms
6,940 KB |
testcase_06 | AC | 1 ms
6,944 KB |
testcase_07 | AC | 2 ms
6,940 KB |
testcase_08 | AC | 1 ms
6,940 KB |
testcase_09 | AC | 1 ms
6,940 KB |
testcase_10 | AC | 1 ms
6,940 KB |
testcase_11 | AC | 1 ms
6,940 KB |
testcase_12 | AC | 2 ms
6,944 KB |
testcase_13 | AC | 1 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,944 KB |
testcase_15 | AC | 1 ms
6,940 KB |
testcase_16 | AC | 1 ms
6,944 KB |
testcase_17 | AC | 1 ms
6,944 KB |
testcase_18 | AC | 1 ms
6,944 KB |
ソースコード
#include <iostream> #include <math.h> using namespace std; int main(void){ /* 1 ~ 10^p から (A)3の倍数 および (B)3の付く数の個数 を求めるプログラム。 ベン図で考えて (A) + (B) - (A)かつ(B) で求めることにした */ // 入力 unsigned long long p = 0; cin >> p; // 結果 unsigned long long result1 = 0; unsigned long long result2 = 0; unsigned long long result3 = 0; // (A)3の倍数 // p1=3, p2=33, p3=333, ... を一般化すると // A(p) = (unsigned long long)(powl(10, p) / 3) result1 = (unsigned long long)(powl(10, p) / 3); // (B)3の付く数 // p1=1, p2=19, ... を一般化すると // A(1) = 1 // A(p) = A(p-1) * 9 + powl(10, p-1) unsigned long long init = 1; for (int i = 1; i <= p; i++) { if (i == 1) { result2 = init; } else { result2 = init * 9 + (unsigned long long)powl(10, i - 1); init = result2; } } // (A)かつ(B) // p1=1, p2=7, ... を一般化すると // A(1) = 1 // A(p) = A(p) * 3 + (A(p-1) - 1) * 6 + (unsigned long long)(powl(10, p) / 3) + 1 init = 1; for (int i = 1; i <= p; i++) { if (i == 1) { result3 = init; } else { result3 = init * 3 + (init - 1) * 6 + (unsigned long long)(powl(10, i-1) / 3) + 1; init = result3; } } // 出力 printf("%llu\n", result1 + result2 - result3); }