結果
問題 |
No.3051 Make All Divisible
|
ユーザー |
![]() |
提出日時 | 2025-03-07 22:57:24 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,613 bytes |
コンパイル時間 | 6,060 ms |
コンパイル使用メモリ | 332,728 KB |
実行使用メモリ | 8,608 KB |
最終ジャッジ日時 | 2025-03-07 22:57:37 |
合計ジャッジ時間 | 7,550 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 13 WA * 18 |
ソースコード
#include <atcoder/all> #include <bits/stdc++.h> #define rep(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) using namespace atcoder; using namespace std; typedef long long ll; using mint = modint998244353; // void solve() { // int n; // cin >> n; // vector<int> a(n); // rep(i, 0, n) { // cin >> a[i]; // if (a[i] > 0) // a[i]--; // } // mint ans = 0; // cout << ans.val() << endl; // } template <typename T> T ceil_div(T a, T b) { if (b < 0) a = -a, b = -b; return (a >= 0 ? (a + b - 1) / b : a / b); } void solve() { int n, k; cin >> n >> k; vector<ll> a(n); rep(i, 0, n) cin >> a[i]; { ll sm = 0; rep(i, 0, n) { sm += a[i]; } if (sm % k != 0) { cout << "-1\n"; return; } } vector<int> b(n); rep(i, 0, n) { b[i] = a[i] % k; } sort(b.begin(), b.end()); if (b.back() == 0) { cout << "0\n"; return; } int las = b.back(); int smbp = 0; rep(i, 0, n - 1) { smbp += b[i]; } if (ceil_div(smbp, k - 1) >= las) { cout << (smbp + las) / k << '\n'; return; } auto f = [&]() { int m = las + k; ll sm = 0; rep(i, 0, n) { sm += min(a[i], (ll)m); } return sm >= (ll)m * (ll)k; }; bool ok = f(); if (!ok) { cout << "-1\n"; return; } cout << max((smbp + las) / k, las + k) << '\n'; } int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); int t; cin >> t; while (t--) { solve(); } }