atcoder155 d問題
https://atcoder.jp/contests/abc155/tasks/abc155_d
が解けません。解説動画を見て、そのコードは理解したのですが、なぜ自分のコードがだめなのかわかりません。
どこがだめなのかわからないので、教えてもらえると嬉しいです。
c++
1#include<iostream> 2#include<cmath> 3#include<algorithm> 4#include<vector> 5#define rep(i, n) for (int i=0; i<(n); i++) 6typedef long long ll; 7using namespace std; 8 9 10int main(){ 11 int N, K; cin >> N >> K; 12 vector<ll> A(N, 0); 13 int minus = 0, plus = 0; 14 rep(i, N) cin >> A[i]; 15 sort(A.begin(), A.end()); 16 rep(i, N){ 17 if(A[i] > 0) plus++; 18 else if(A[i] < 0) minus++; 19 } 20 ll a = max(abs(A[0]), abs(A[N-1])); 21 ll l = -a*a, r = a*a; 22 ll tot=0; 23 ll mid; 24 while(l+1 < r){ 25 ll limit_minus = 0; 26 ll limit_plus = N-1; 27 mid = (l+r)/2; 28 rep(i, N){ 29 if(A[i]<0){ 30 while(A[i]*A[limit_minus] > mid && limit_minus < N) limit_minus++; 31 tot += N-limit_minus; 32 }else{ 33 while(A[i]*A[limit_plus] > mid && limit_plus >= 0 ) limit_plus--; 34 tot += limit_plus+1; 35 } 36 } 37 rep(i, N){ 38 if(A[i]*A[i] <= mid) tot--; 39 } 40 tot /= 2; 41 if(tot < K) l = mid; 42 else r = mid; 43 tot = 0; 44 } 45 cout << r << endl; 46}
plus と minus を求めていますが、その値を使っていません。説明の追加をお願いします。
回答1件
あなたの回答
tips
プレビュー