結果
問題 | No.2918 Divide Applicants Fairly |
ユーザー | けいと |
提出日時 | 2024-10-09 01:39:27 |
言語 | C++23(gcc13) (gcc 13.2.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,835 bytes |
コンパイル時間 | 6,761 ms |
コンパイル使用メモリ | 288,492 KB |
実行使用メモリ | 194,056 KB |
最終ジャッジ日時 | 2024-10-09 01:39:38 |
合計ジャッジ時間 | 7,969 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
10,496 KB |
testcase_01 | WA | - |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | TLE | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
testcase_39 | -- | - |
testcase_40 | -- | - |
testcase_41 | -- | - |
testcase_42 | -- | - |
testcase_43 | -- | - |
testcase_44 | -- | - |
testcase_45 | -- | - |
testcase_46 | -- | - |
testcase_47 | -- | - |
testcase_48 | -- | - |
testcase_49 | -- | - |
testcase_50 | -- | - |
testcase_51 | -- | - |
testcase_52 | -- | - |
testcase_53 | -- | - |
testcase_54 | -- | - |
testcase_55 | -- | - |
testcase_56 | -- | - |
testcase_57 | -- | - |
testcase_58 | -- | - |
testcase_59 | -- | - |
testcase_60 | -- | - |
testcase_61 | -- | - |
testcase_62 | -- | - |
testcase_63 | -- | - |
ソースコード
#include <bits/stdc++.h> using namespace std; vector<vector<vector<int>>> generate_half(const vector<int>& R) { int n = R.size(); vector<vector<vector<int>>> dp(21, vector<vector<int>>(21, vector<int>())); dp[0][0].push_back(0); for(auto r : R){ for(int s_red = 20; s_red >=0; s_red--){ for(int s_blue = 20; s_blue >=0; s_blue--){ if(dp[s_red][s_blue].empty()) continue; if(s_red <20){ for(auto sum_diff : dp[s_red][s_blue]){ dp[s_red+1][s_blue].push_back(sum_diff + r); } } if(s_blue <20){ for(auto sum_diff : dp[s_red][s_blue]){ dp[s_red][s_blue+1].push_back(sum_diff - r); } } } } } for(int s_red=0; s_red<=20; s_red++){ for(int s_blue=0; s_blue<=20; s_blue++){ if(dp[s_red][s_blue].empty()) continue; sort(dp[s_red][s_blue].begin(), dp[s_red][s_blue].end()); dp[s_red][s_blue].erase(unique(dp[s_red][s_blue].begin(), dp[s_red][s_blue].end()), dp[s_red][s_blue].end()); } } return dp; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int N; cin >> N; vector<int> R(N); for(auto &x : R) cin >> x; int mid = N /2; vector<int> A(R.begin(), R.begin()+mid); vector<int> B(R.begin()+mid, R.end()); vector<vector<vector<int>>> dp_A = generate_half(A); vector<vector<vector<int>>> dp_B = generate_half(B); int min_diff = INT32_MAX; for(int k=1; k <= min(20, N/2); k++){ for(int s_red_a=0; s_red_a <=k; s_red_a++){ int s_blue_a = k - s_red_a; if(s_blue_a <0 || s_blue_a > (int)A.size()) continue; int s_red_b = k - s_red_a; int s_blue_b = k - s_blue_a; if(s_red_b <0 || s_blue_b <0 || s_red_b > (int)B.size() || s_blue_b > (int)B.size()) continue; for(auto sum_diff_a : dp_A[s_red_a][s_blue_a]){ const vector<int>& vec = dp_B[s_red_b][s_blue_b]; if(vec.empty()) continue; int target = -sum_diff_a; auto it = lower_bound(vec.begin(), vec.end(), target); if(it != vec.end()){ int sum_diff_b = *it; min_diff = min(min_diff, abs(sum_diff_a + sum_diff_b)); } if(it != vec.begin()){ it--; int sum_diff_b = *it; min_diff = min(min_diff, abs(sum_diff_a + sum_diff_b)); } } } } cout << min_diff << "\n"; }