Submission #40638

#TimeUsernameProblemLanguageResultExecution timeMemory
40638leejseoDetecting Molecules (IOI16_molecules)C++98
100 / 100
75 ms35884 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; typedef long long lld; vector< pair<lld, lld> > L; lld fr[200002]; lld bk[200002]; vector<int> find_subset(int l, int u, vector<int> w) { int N = w.size(); for (int i=0; i<N; i++){ L.push_back(make_pair(w[i], i)); } sort(L.begin(), L.end()); for (int i=0; i<N; i++){ if (i == 0){ fr[i] = L[i].first; bk[i] = L[N-i-1].first; continue; } else{ fr[i] = fr[i-1] + L[i].first; bk[i] = bk[i-1] + L[N-i-1].first; } } vector<int> ans; for (int k=0; k<N; k++){ if (fr[k] > u) break; if (fr[k] >= l && fr[k] <= u){ for (int i=0; i<=k; i++){ ans.push_back(L[i].second); } sort(ans.begin(), ans.end()); return ans; } if (bk[k] >= l && bk[k] <= u){ for (int i=N-1; i>= N-k-1; i--){ ans.push_back(L[i].second); } sort(ans.begin(), ans.end()); return ans; } if (fr[k] < l && bk[k] > u){ int f = 0; int r = k; int temp = fr[k]; while (true){ f += 1; r += 1; temp -= L[f-1].first; temp += L[r].first; if (temp <= u && temp >= l){ //printf("%d %d %d\n", temp, f, r); for (int i=f; i<=r; i++){ ans.push_back(L[i].second); } sort(ans.begin(), ans.end()); return ans; } } } } return ans; }
#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...