Submission #1223441

#TimeUsernameProblemLanguageResultExecution timeMemory
122344112baaterDetecting Molecules (IOI16_molecules)C++20
100 / 100
39 ms4132 KiB
#include "molecules.h" #include <iostream> #include <vector> #include <queue> using namespace std; typedef long long ll; int U, L, N; ll total = 0; struct number { int n; int index; bool operator<(const number& other) const { return n < other.n; } }; bool check() { return (total >= L && total <= U); } vector<int> q_to_v(queue<int>& q) { vector<int> retVec; for (;!q.empty();q.pop()) { retVec.push_back(q.front()); } return retVec; } vector<int> find_subset(int l, int u, vector<int> w) { int n = w.size(); N = n; U = u; L = l; vector<number> numbers; for (int i = 0; i < w.size(); i++) { number num; num.n = w[i]; num.index = i; numbers.push_back(num); } sort(numbers.begin(),numbers.end()); queue<int> ans; ll testTot = 0; for(int i = 0; i < n; i++) { testTot += w[i]; } if (testTot < l) { return vector<int>(0); } int i = 0; while (total <= u) { ans.push(numbers[i].index); total += numbers[i].n; if (check()) { return q_to_v(ans); } i++; } vector<int> returnVector; int lower = 0; while (!check()) { if (total > u) { if (lower == n) break; total -= numbers[lower].n; lower++; ans.pop(); } if (total < l) { if (i == n) break; total += numbers[i].n; ans.push(numbers[i].index); i++; } if (check()) { return q_to_v(ans); } } return vector<int>(0); }

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...