Submission #589900

#TimeUsernameProblemLanguageResultExecution timeMemory
589900Sam_a17Detecting Molecules (IOI16_molecules)C++14
46 / 100
1078 ms5020 KiB
#define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> // #include "molecules.h" #include <cstdio> using namespace std; #define ll long long const int M = 5e5 + 10, N = 5e5 + 10; int n; bool dp[M]; int bit[N]; int par[N]; std::vector<int> find_subset(int l, int u, std::vector<int> w) { n = w.size(); vector<int> possible{0}; vector<int> answ; dp[0] = true; // sort(w.begin(), w.end()); vector<pair<int, int>> vi; for(int i = 0; i < n; i++) { vi.push_back({w[i], i}); } sort(vi.begin(), vi.end()); for(int i = 0; i < n; i++) { if(w[i] > u) break; vector<int> to_add; for(auto j: possible) { if(j + vi[i].first > u) { continue; } if(dp[j + vi[i].first]) { continue; } dp[j + vi[i].first] = true; to_add.push_back(j); } for(auto j: to_add) { par[j + vi[i].first] = j; bit[j + vi[i].first] = vi[i].second; if(j + vi[i].first >= l && j + vi[i].first <= u) { int curr = j + vi[i].first; while(curr) { answ.push_back(bit[curr]); curr = par[curr]; } return answ; } possible.push_back(j + vi[i].first); } // sort(possible.begin(), possible.end()); } return answ; }
#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...