Submission #489094

#TimeUsernameProblemLanguageResultExecution timeMemory
4890941neDetecting Molecules (IOI16_molecules)C++14
0 / 100
0 ms204 KiB
#include "molecules.h" #include<bits/stdc++.h> using namespace std; std::vector<int> find_subset(int l, int u, std::vector<int> arr) { int n = arr.size(); int sum = 0; for(int i = 0;i<n;++i){ sum+=arr[i]; } vector<int>ans; if (sum<l){ return ans; } map<int,int>dp; vector<int>par(u+1,-1); if (l<=sum - u){ dp[0]=1; int val = -1; for (int i = 0 ;i<n;++i){ for (auto j:dp){ int x = j.first; if (x+arr[i]>u)continue; if (par[x+arr[i]]!=-1)continue; if (par[x]==i)continue; dp[x+arr[i]]=true; par[x+arr[i]]=i; if (x+arr[i]>=l&&x+arr[i]<=u){ val = x+arr[i]; break; } } if (val!=-1)break; } while(val>0){ ans.push_back(par[val]); val-=arr[par[val]]; } } else{ int temp = sum - l; l = sum - u; u = temp; dp[0]=1; int val = -1; for (int i = 0 ;i<n;++i){ for (auto j:dp){ int x = j.first; if (x+arr[i]>u)continue; if (par[x+arr[i]]!=-1)continue; if (par[x]==i)continue; dp[x+arr[i]]=true; par[x+arr[i]]=i; if (x+arr[i]>=l&&x+arr[i]<=u){ val = x+arr[i]; break; } } if (val!=-1)break; } vector<bool>got(n,false); bool ok=false; if (val!=-1)ok=true; while(val>0){ got[par[val]]=true; val-=arr[par[val]]; } if (ok) for (int i = 0;i<n;++i){ if (!got[i])ans.push_back(i); } } 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...