Submission #297854

#TimeUsernameProblemLanguageResultExecution timeMemory
297854DovranDetecting Molecules (IOI16_molecules)C++11
31 / 100
149 ms65536 KiB
#include <bits/stdc++.h>
#define N 1000009
#define pii pair <int, int>
#define ff first
#define sz() size()
#define ss second
#define pb push_back
#define ll long long

using namespace std;

int c[N], n, rsl;
vector<int> ans;
vector<int> e[N];
int vis[N], v[N];

void dfs(int nd){
//	cout<<nd<<'\n';

	if(!nd){
		rsl=1;
		return;
	}
	for(auto i:e[nd]){
		if(!vis[i]){
			vis[i]=1;
			dfs(nd-v[i]);
			if(!rsl) vis[i]=0;
		}
		if(rsl)
			return;
	}
}

vector<int> find_subset(int l, int r, vector<int> w){
	n=w.sz();
	for(int i=0; i<n; i++)
		v[i]=w[i];
	c[0]=1;
	for(int i=0; i<n; i++){
		for(int j=r; j>=0; j--){
			if(c[j]){
				c[j+v[i]]=1;
				e[j+v[i]].pb(i);
			}
		}
	}
	for(int i=l; i<=r; i++){
		if(c[i]){
			dfs(i);
//			cout<<" asd \n";
			for(int j=0; j<n; j++)
				if(vis[j])
					ans.pb(j);
			break;
		}
	}
	return ans;
}
/*
int main(){
	int m, l, r, x;
	vector<int>v;
	cin>>m>>l>>r;
	for(int i=0; i<m; i++)
		cin>>x, v.pb(x);
	vector<int>asd=find_subset(l, r, v);
	for(auto i:asd)
		cout<<i<<' ';
}*/
#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...