174342025-07-16 11:52:46peti1234Particlescpp17Hibás válasz 40/1001.501s8756 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> sorx, sory;
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    long double l;
    int n,k; cin >> n >> l >> k;

    vector<pair<long double,long double>> x(n),y(n);
    for (int i = 0; i < n; i++) {
        long double a, b;
        cin >> a >> b;
        x[i]={a, b};
    }
    for (int i = 0; i < n; i++) {
        long double a, b;
        cin >> a >> b;
        y[i]={a, b};
    }

    // sorx, sory-ba a k  leggyorsabb

    long double lo = -1, h = 3e9;
    for (int it=0; it<70; it++) {
        long double m = (lo+h)/2;
        vector<pair<long double, int> > x1, y1;
        for (int i = 0; i < n; i++) {
            x1.push_back({(m-x[i].first)*x[i].second,i});
        }
        for (int i = 0; i < n; i++) {
            y1.push_back({(m-y[i].first)*y[i].second,i});
        }
        sort(x1.begin(), x1.end());
        sort(y1.begin(), y1.end());
        if (x1[n-k].first+y1[n-k].first > l) h = m;
        else lo = m;
        if(it+1 == 70) {
            for (int i = n-1; i >= n-k; i--) sorx.push_back(x1[i].second), sory.push_back(y1[i].second);
            long double sum=x1[n-k].first+y1[n-k].first, eps=1e-5;
            assert(l-eps<sum && sum<l+eps);
        }
    }

    assert(0<lo && h<2e9);
    assert(sorx.size()==k && sory.size()==k);

    vector<pair<long double, pair<int, int> > > a;
    for (int i:sorx) {
        for (int j:sory) {
            if (x[i].first < y[j].first) a.push_back({(l-(y[j].first-x[i].first)*x[i].second)/(x[i].second+y[j].second)+((y[j].first)),{i,j}});
            else a.push_back({(l-(x[i].first-y[j].first)*y[j].second)/(x[i].second+y[j].second)+((x[i].first)),{i,j}});
        }
    }
    sort(a.begin(), a.end());
    vector<bool> w1(n, 0),w2(n, 0);
    for (int i = 0; i < a.size(); i++) {
        int x=a[i].second.first, y=a[i].second.second;
        if (!w1[x] && !w2[y]) {
            w1[x] = true;
            w2[y] = true;
            cout << x+1 << ' ' << y+1 << '\n';
            k--;
            if (k == 0) break;
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask140/100
1Elfogadva5/51ms316 KiB
2Hibás válasz0/53ms820 KiB
3Hibás válasz0/53ms568 KiB
4Hibás válasz0/58ms820 KiB
5Hibás válasz0/513ms824 KiB
6Hibás válasz0/518ms964 KiB
7Elfogadva5/5247ms2156 KiB
8Elfogadva5/5342ms2616 KiB
9Elfogadva5/5486ms3716 KiB
10Elfogadva5/5694ms4616 KiB
11Elfogadva5/5825ms5228 KiB
12Hibás válasz0/5989ms6752 KiB
13Elfogadva5/51.172s7504 KiB
14Elfogadva5/51.256s8076 KiB
15Hibás válasz0/51.366s8268 KiB
16Hibás válasz0/51.47s8756 KiB
17Hibás válasz0/51.501s8752 KiB
18Hibás válasz0/51.47s8748 KiB
19Hibás válasz0/51.45s8752 KiB
20Futási hiba0/51.445s8756 KiB