Submission #1089346

#TimeUsernameProblemLanguageResultExecution timeMemory
1089346KluydQBank (IZhO14_bank)C++17
100 / 100
669 ms50772 KiB
#include <bits/stdc++.h>
#define Shrek_Crush228 ios_base::sync_with_stdio(0), cin.tie(0);

using namespace std;

const int N = 1e5 + 123;

int a[N], b[N], l, r, n, k, m, w, sum, sum1, y, ans1, ans, x;
string s, s1;

int nt[N], taked[N];
bool ok;
vector <int> v[22];
int mp[22][N * 11];

void mask( int i, int sop, int need, int st, int sum = 0, int ss = 0 )
{
	if( sum > need ) return;
	
	if( i == m )
	{
		if( sum != need || mp[st][ss] ) return;
		mp[st][ss] = 1;
		v[st].push_back( ss );
		//cout << ss << '\n';
		
		return;
	}
	mask( i + 1, sop, need, st, sum, ss + ((( sop >> i ) & 1 ) ? ( 1 << i ) : 0 ));
	if( !(( sop >> i ) & 1 )) mask( i + 1, sop, need, st, sum + b[i + 1], ss + ( 1 << i ));
}
void rec( int i, string s )
{
	if( i > n ) 
	{
		ok = 1;
		return;
	}
	v[i].clear();
	int sop = 0;
	
	for( int bit = 0; bit < m; bit ++ )
	{
		if( s[bit] == '1' ) sop += ( 1 << bit );
	}
	mask( 0, sop, a[i], i );
	
	for( auto mas : v[i] )
	{
		string sss = "";
		int sam = mas;
		
		for( int bit = 0; bit < m; bit ++ )
		{
			if(( sam >> bit ) & 1 ) sss += '1';
			else sss += '0';
		}
		//cout << sss << ' ' << i << '\n';
		
		rec( i + 1, sss );
		if( ok ) return;
	}
}
void solve()
{
	cin >> n >> m;
	
	string nw = "";
	
	for( int i = 1; i <= n; i ++ ) cin >> a[i];
	for( int i = 1; i <= m; i ++ ) cin >> b[i], nw += '0';
	
	rec( 1, nw );
	
	if( ok ) cout << "YES\n";
	else cout << "NO\n";
}
int main() 
{
	//freopen("rmq.in", "r", stdin);
	//freopen("rmq.out", "w", stdout);
	    
    Shrek_Crush228	
    
    int test = 1;
    
    if( !test ) cin >> test;
	
	while( test -- )
	{
		solve();
	}
}
// solved by KluydQ
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...