結果
問題 | No.1358 [Zelkova 2nd Tune *] 語るなら枚数を... |
ユーザー |
👑 ![]() |
提出日時 | 2020-09-25 00:16:02 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,071 bytes |
コンパイル時間 | 629 ms |
コンパイル使用メモリ | 66,224 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-23 11:53:57 |
合計ジャッジ時間 | 1,211 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | WA * 17 |
ソースコード
#include<iostream>using namespace std;using ll = long long;ll gcd(ll a, ll b) {if (b == 0) {return a;}else {return gcd(b, a % b);}}ll extend_gcd(ll a, ll b, ll& x, ll& y) {if (b == 0) {x = 1;y = 0;return a;}else {long long d = extend_gcd(b, a % b, y, x);y -= a / b * x;return d;}}int main() {ll N, K, H, Y;ll G, A, B, S, _, P, Q;ll ans = 0;ll beta, upper, lower;ll mod = 1000000007;cin >> N >> K >> H >> Y;if (N < K) swap(N, K);if (N < H) swap(N, H);G = gcd(K, H);A = K / G;B = H / G;_ = extend_gcd(A, B, P, Q);for (ll x = 0; x <= Y / N; x++) {beta = Y - N * x;if ((beta % G) != 0) continue;S = beta / G;upper = (S * Q) / A;if ((S * Q) % A < 0) upper -= 1;lower = (-S * P + (B - 1)) / B;if ((-S * P + (B - 1)) % B < 0)lower -= 1;ans += upper - lower + 1;ans %= mod;}cout << ans << endl;return 0;}