Submission #173397

#TimeUsernameProblemLanguageResultExecution timeMemory
173397FieryPhoenixDetecting Molecules (IOI16_molecules)C++11
100 / 100
260 ms29132 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cmath> #include <cstdio> #include <map> #include <queue> #include <set> #include <iomanip> #include <deque> #include <cassert> #include <ctime> #include <cstring> #include <cstdlib> #include <chrono> #include <ctime> #include <random> #include <stack> #include <unordered_set> #include <unordered_map> #include <iterator> #include <climits> #include "molecules.h" using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef long long ll; typedef long double ld; #define INF 2001001001 #define MOD 1000000007 int N,W[200005],W2[200005]; ll sum[200005]; map<int,vector<int>>ind; vector<int> find_subset(int L, int U, vector<int>w) { vector<int>ans; N=w.size(); for (int i=1;i<=N;i++){ W[i]=w[i-1]; W2[i]=W[i]; ind[W[i]].push_back(i); } sort(W+1,W+N+1); for (int i=1;i<=N;i++) sum[i]=sum[i-1]+W[i]; int len=-1; for (int i=1;i<=N;i++){ if (sum[i]<=U && sum[N]-sum[N-i]>=L){ len=i; break; } } if (len==-1) return ans; ll cur=sum[N]-sum[N-len]; deque<int>q; int smallest=1; for (int i=N;i>N-len;i--) q.push_back(i); while (!(cur>=L && cur<=U)){ int x=q[0]; q.pop_front(); cur-=W[x]; cur+=W[smallest]; q.push_back(smallest); //assert(!used[smallest]); smallest++; } //assert(cur>=L && cur<=U); //assert((int)q.size()==len); for (int i=0;i<len;i++){ if (ind[W[q[i]]].size()==0){ vector<int>v; return v; } ans.push_back(ind[W[q[i]]].back()-1); ind[W[q[i]]].pop_back(); } ll cur2=0; for (int i=0;i<len;i++) cur2+=w[ans[i]]; //assert(cur2>=L && cur2<=U); 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...