結果
問題 |
No.673 カブトムシ
|
ユーザー |
![]() |
提出日時 | 2019-01-03 17:40:19 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 771 bytes |
コンパイル時間 | 140 ms |
コンパイル使用メモリ | 29,312 KB |
最終ジャッジ日時 | 2025-01-06 20:09:01 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 14 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:31:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 31 | scanf("%jd %jd %jd", &B, &C, &D); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <cstdio> #include <cstdint> constexpr intmax_t MOD = 1e9+7; intmax_t modpow(intmax_t base, intmax_t iexp) { intmax_t res = 1; for (intmax_t dbl = base; iexp; iexp >>= 1) { if (iexp & 1) res = res * dbl % MOD; dbl = dbl * dbl % MOD; } return res; } intmax_t modinv(intmax_t n) { return modpow(n, MOD-2); } intmax_t moddiv(intmax_t m, intmax_t n) { return m * modinv(n) % MOD; } intmax_t modsub(intmax_t m, intmax_t n) { m -= n; if (m < 0) m += MOD; return m; } int main() { intmax_t B, C, D; scanf("%jd %jd %jd", &B, &C, &D); B %= MOD; C %= MOD; if (C == 1) return !printf("%jd\n", B * (D % MOD) % MOD); intmax_t Cn = modpow(C, D+1); printf("%jd\n", modsub(modsub(Cn, 1) * moddiv(B, modsub(C, 1)) % MOD, B)); }