結果
問題 |
No.3051 Make All Divisible
|
ユーザー |
![]() |
提出日時 | 2025-07-13 18:49:13 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 29 ms / 2,000 ms |
コード長 | 1,414 bytes |
コンパイル時間 | 1,109 ms |
コンパイル使用メモリ | 84,408 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-07-13 18:49:16 |
合計ジャッジ時間 | 2,702 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 32 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> using namespace std; typedef long long ll; ll inf = 1000000000000000; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; while(t){ t--; ll i,n,k; cin >> n >> k; vector<ll> a(n); for(i=0;i<n;i++) cin >> a[i]; ll sum = 0; for(i=0;i<n;i++) sum += a[i]; if(sum%k!=0){ cout << -1 << "\n"; continue; } vector<pair<ll,ll>> b(n); for(i=0;i<n;i++) b[i] = {a[i]%k,i}; sort(b.begin(),b.end()); vector<ll> _a(n),c(n); for(i=0;i<n;i++){ _a[i] = a[b[i].second]; c[i] = b[i].first; } for(i=0;i<n;i++) a[i] = _a[i]; ll mx = -1; sum = 0; for(i=0;i<n;i++){ mx = max(mx,c[i]); sum += c[i]; } if(mx<=sum/k){ cout << sum/k << "\n"; continue; } int j = 0; ll ans = inf; for(i=0;i<2*n*k;i++){ if(c[j] + k<=a[j]){ c[j] += k; mx = max(mx,c[j]); sum += k; } j++; if(j==n) j = 0; if(mx<=sum/k){ ans = sum/k; break; } } if(ans==inf) cout << -1 << "\n"; else cout << ans << "\n"; } }