結果
問題 | No.2570 最大最大公約数 |
ユーザー | yasunori |
提出日時 | 2023-12-02 16:35:38 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 46 ms / 2,000 ms |
コード長 | 2,579 bytes |
コンパイル時間 | 2,102 ms |
コンパイル使用メモリ | 213,732 KB |
実行使用メモリ | 8,960 KB |
最終ジャッジ日時 | 2024-11-13 17:14:22 |
合計ジャッジ時間 | 3,214 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 3 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 7 ms
6,400 KB |
testcase_06 | AC | 34 ms
8,960 KB |
testcase_07 | AC | 29 ms
8,832 KB |
testcase_08 | AC | 4 ms
5,248 KB |
testcase_09 | AC | 5 ms
5,248 KB |
testcase_10 | AC | 17 ms
8,704 KB |
testcase_11 | AC | 46 ms
8,832 KB |
testcase_12 | AC | 40 ms
8,832 KB |
testcase_13 | AC | 45 ms
8,832 KB |
testcase_14 | AC | 21 ms
8,704 KB |
testcase_15 | AC | 29 ms
7,040 KB |
testcase_16 | AC | 28 ms
5,632 KB |
testcase_17 | AC | 10 ms
5,248 KB |
testcase_18 | AC | 2 ms
5,248 KB |
testcase_19 | AC | 3 ms
5,248 KB |
testcase_20 | AC | 2 ms
5,248 KB |
testcase_21 | AC | 2 ms
5,248 KB |
testcase_22 | AC | 3 ms
5,248 KB |
testcase_23 | AC | 2 ms
5,248 KB |
testcase_24 | AC | 2 ms
5,248 KB |
testcase_25 | AC | 5 ms
6,528 KB |
testcase_26 | AC | 5 ms
6,784 KB |
testcase_27 | AC | 2 ms
5,248 KB |
testcase_28 | AC | 2 ms
5,248 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; template <typename T> using min_priority_queue = priority_queue<T,vector<T>,greater<T>>; template<typename T> void printv(vector<T> &v){ bool b = false; for(auto i : v){ if(b) cout << " "; else b = true; cout << i; } cout << endl; } template <typename T> bool chmin(T &a, const T& b) { if (a > b) { a = b; // aをbで更新 return true; } return false; } template <typename T> bool chmax(T &a, const T& b) { if (a < b) { a = b; // aをbで更新 return true; } return false; } void yn(bool b){ if(b) cout << "Yes" << endl; else cout << "No" << endl; } bool debug; bool randomInput; void input(){ if(debug && randomInput){ } else{ } return; } void calc(){ int N, K; cin >> N >> K; vector<int64_t> A(N); for(int i = 0; i < N; i++){ cin >> A[i]; } vector<vector<int64_t>> D; int sz = 0; for(int i = 0; i < N; i++){ for(int j = i+1; j < N; j++){ int64_t d = abs(A[i] - A[j]); if(d <= K) continue; D.push_back({}); sz++; for(int k = 0; k <= K; k++){ D[sz-1].push_back(d-k); } } } set<int64_t> S; if(D.size()){ for(int64_t j : D[0]){ for(int64_t k = 1; k*k <= j; k++){ if(j%k == 0){ S.insert(k); S.insert(j/k); } } } } else{ int64_t Amin = 1001002003004005006; int64_t Amax = 0; for(int64_t i : A){ chmin(Amin, i); chmax(Amax, i); } for(int64_t i = 1; i <= 2*K; i++){ S.insert(i); } for(int64_t i = Amin; i <= Amax; i++){ S.insert(i); } } int64_t ans = 0; for(int64_t i : S){ int64_t cnt = 0; for(int64_t j : A){ cnt += min(j%i, (i-j%i)%i); } if(cnt > K) continue; chmax(ans, i); } cout << ans << endl; return; } int64_t ansSimple; void calcSimple(){ return; } void calc1(){ int t; cin >> t; for(int i = 0; i < t; i++){ input(); calc(); calcSimple(); } } int main(){ debug = 0; randomInput = 0; srand(time(NULL)); cout << fixed << setprecision(12); if(debug){ calc1(); } else{ input(); calc(); } return 0; } //