こちらの問題の解答コードに関して質問がございます。
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ll n, k; cin >> n >> k; vector<ll> x, y; y.push_back(0); for (int i=0;i<n;++i) { ll a; cin >> a; if (a < 0) x.push_back(-a); else y.push_back(a); } x.push_back(0);//1 sort(x.begin(), x.end()); int ms = min(k, (ll)y.size()-1);//2 ll ans = 1e16; for (int i = ms; i >= 0; i--) { if (k - i >= x.size()) break;//3 ans = min(ans, 2 * y[i] + x[k - i]); ans = min(ans, 2 * x[k - i] + y[i]); } cout << ans << endl; return 0; }
#####質問内容
1.なぜ0を追加しているのでしょうか?このひとつ前のfor文で負の数はマイナスして追加してるので正の数にされてるのでsortすると0,...となると思うのですが狙いがわかりません。。
2.なぜy.size()から1引いているのでしょうか?
3.入力する座標の個数(n)がkを上回ったら弾く処理という理解で合ってますでしょうか?
以上になります。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 06:50
2020/05/27 14:34
2020/05/28 13:46
2020/05/28 18:02
2020/05/29 04:56
2020/05/29 08:27
2020/05/29 10:11