Submission #1281517

#TimeUsernameProblemLanguageResultExecution timeMemory
1281517xorreverseDetecting Molecules (IOI16_molecules)C++20
100 / 100
37 ms5664 KiB
#include<bits/stdc++.h>
#include "molecules.h"
using namespace std;
vector<int> find_subset(int l, int u, vector<int> w) {
    int n = w.size();
    vector<long long> sum;
    sum.resize(n + 1);
    vector<pair<int, int>> val;
    val.push_back({-1e9, -1e9});
    for (int i = 0; i < n; i ++){
        if (w[i] >= l && w[i] <= u) return {i};
        val.push_back({w[i], i});

    }
    sort(val.begin(), val.end());
    if (val[1].first > u) return {};

    for (int i = 1; i <= n; i ++) sum[i] = sum[i - 1] + val[i].first;
    vector<int> res;
    for (int i = 1; i <= n; i ++){

        if (sum[n] - sum[n - i] < l) continue;
        if (sum[i] > u)  continue;
        if (sum[n] - sum[n - i] <= u ){
            for (int j = n; j >= n - i + 1;j --) res.push_back(val[j].second);
            return res;
        }
        if (sum[i] >= l){
            for (int j = 1; j <= i; j ++) res.push_back(val[j].second);
            return res;
        }
        int idl = 1, idr = n;
        long long dead = sum[i];
        while (idl <= n && idr >= 1){
            if (idr <= i) break;
             dead += val[idr].first - val[idl].first;
             swap(val[idl], val[idr]);
             if (dead >= l && dead <= u){
                for (int j = 1; j <= i; j ++){
                    res.push_back(val[j].second);
                }
                return res;
             }
             idl ++;
             idr --;
        }
    }
    return {};
}

Compilation message (stderr)

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...