Submission #742796

# Submission time Handle Problem Language Result Execution time Memory
742796 2023-05-17T01:25:45 Z haydendoo Bank (IZhO14_bank) C++17
100 / 100
298 ms 24980 KB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC target("bmi,bmi2,abm,lzcnt,popcnt")

#define ll long long
#define ld long double
#define ar array

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define int long long
#define endl '\n'

struct chash {
    const int RANDOM = (long long)(make_unique<char>().get()) ^ chrono::high_resolution_clock::now().time_since_epoch().count();
    static unsigned long long hash_f(unsigned long long x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }
    static unsigned hash_combine(unsigned a, unsigned b) { return a * 31 + b; }
    int operator()(int x) const { return hash_f(x)^RANDOM; }
};

template<class K,class V> using safe_umap = gp_hash_table<K,V,chash,equal_to<K>,direct_mask_range_hashing<>,linear_probe_fn<>,hash_standard_resize_policy<hash_exponential_size_policy<>,hash_load_check_resize_trigger<>,true>>;

template<class K> using safe_uset = gp_hash_table<K,null_type,chash,equal_to<K>,direct_mask_range_hashing<>,linear_probe_fn<>,hash_standard_resize_policy<hash_exponential_size_policy<>,hash_load_check_resize_trigger<>,true>>; 

template<class K,class V> using umap = gp_hash_table<K,V,hash<K>,equal_to<K>,direct_mask_range_hashing<>,linear_probe_fn<>,hash_standard_resize_policy<hash_exponential_size_policy<>,hash_load_check_resize_trigger<>,true>>;

template<class K> using uset = gp_hash_table<K,null_type,hash<K>,equal_to<K>,direct_mask_range_hashing<>,linear_probe_fn<>,hash_standard_resize_policy<hash_exponential_size_policy<>,hash_load_check_resize_trigger<>,true>>; 

template <typename T>
using pbds_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

template <typename K, typename V>
using pbds_map = tree<K, V, less<K>, rb_tree_tag, tree_order_statistics_node_update>;

template <typename T>using pbds_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;

template <typename K, typename V>using pbds_multimap = tree<K, V, less_equal<K>, rb_tree_tag, tree_order_statistics_node_update>;

#define vt vector
#define pb push_back
#define all(c) (c).begin(), (c).end()
#define sz(x) (int)(x).size()

#define F_OR(i, a, b, s) for (int i=(a); (s)>0?i<(b):i>(b); i+=(s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)
#define EACH(x, a) for (auto& x: a)

template<class T> bool umin(T& a, const T& b) {
	return b<a?a=b, 1:0;
}
template<class T> bool umax(T& a, const T& b) { 
	return a<b?a=b, 1:0;
} 

ll FIRSTTRUE(function<bool(ll)> f, ll lb, ll rb) {
	while(lb<rb) {
		ll mb=(lb+rb)/2;
		f(mb)?rb=mb:lb=mb+1; 
	} 
	return lb;
}
ll LASTTRUE(function<bool(ll)> f, ll lb, ll rb) {
	while(lb<rb) {
		ll mb=(lb+rb+1)/2;
		f(mb)?lb=mb:rb=mb-1; 
	} 
	return lb;
}

template<class A> void read(vt<A>& v);
template<class A, size_t S> void read(ar<A, S>& a);
template<class T> void read(T& x) {
	cin >> x;
}
void read(double& d) {
	string t;
	read(t);
	d=stod(t);
}
void read(long double& d) {
	string t;
	read(t);
	d=stold(t);
}
template<class H, class... T> void read(H& h, T&... t) {
	read(h);
	read(t...);
}
template<class A> void read(vt<A>& x) {
	EACH(a, x)
		read(a);
}
template<class A, size_t S> void read(array<A, S>& x) {
	EACH(a, x)
		read(a);
}

string to_string(const char c) {
	return string(1, c);
}
string to_string(const bool b) {
	return b?"YES":"NO";
}
string to_string(const char* s) {
	return string(s);
}
string to_string(const string& s) {
	return s;
}
string to_string(const vt<bool>& v) {
	string res;
	FOR(sz(v))
		res+=char('0'+v[i]);
	return res;
}
template<class T1, class T2>
string to_string(const pair<T1, T2>& p) {
	return to_string(p.first) + ' '  + to_string(p.second);
} 

template<size_t S> string to_string(const bitset<S>& b) {
	string res;
	FOR(S)
		res+=char('0'+b[i]);
	return res;
}
template<class T> string to_string(const T& v) {
    bool f=1;
    string res;
    EACH(x, v) {
		if(!f)
			res+=' ';
		f=0;
		res+=to_string(x);
	}
    return res;
}
template<class A> void write(const A& x) {
	cout << to_string(x);
}
template<class H, class... T> void write(const H& h, const T&... t) { 
	write(h);
	write(t...);
}
void print() {
	write("\n");
}
template<class H, class... T> void print(const H& h, const T&... t) { 
	write(h);
	if(sizeof...(t))
		write(' ');
	print(t...);
}

void DBG() {
	cerr << "]" << endl;
}
template<class H, class... T> void DBG(H h, T... t) {
	cerr << to_string(h);
	if(sizeof...(t))
		cerr << ", ";
	DBG(t...);
}
#ifdef _DEBUG
#define dbg(...) cerr << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
#else
#define dbg(...) 0
#endif

template<class T> void offset(ll o, T& x) {
	x+=o;
}
template<class T> void offset(ll o, vt<T>& x) {
	EACH(a, x)
		offset(o, a);
}
template<class T, size_t S> void offset(ll o, ar<T, S>& x) {
	EACH(a, x)
		offset(o, a);
}

mt19937 mt_rng(chrono::steady_clock::now().time_since_epoch().count());
ll randint(ll a, ll b) {
	return uniform_int_distribution<ll>(a, b)(mt_rng);
}

template<class T, class U> void vti(vt<T> &v, U x, size_t n) {
	v=vt<T>(n, x);
}
template<class T, class U> void vti(vt<T> &v, U x, size_t n, size_t m...) {
	v=vt<T>(n);
	EACH(a, v)
		vti(a, x, m);
}

#ifdef _WIN32
#define getchar_unlocked() _getchar_nolock()
#endif

inline int readint() {
    int x=0; char ch=getchar_unlocked(); bool s=1;
    while(ch<'0'||ch>'9'){if(ch=='-')s=0;ch=getchar_unlocked();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar_unlocked();}
    return s?x:-x;
}

const int d4i[4]={-1, 0, 1, 0}, d4j[4]={0, 1, 0, -1};
const int d8i[8]={-1, -1, 0, 1, 1, 1, 0, -1}, d8j[8]={0, 1, 1, 1, 0, -1, -1, -1};

#define eb emplace_back
typedef pair<int,int> pi;

const int mxN=1ll<<20, mod=1e9+7;

int memo[mxN];
int target[mxN]={0}, left_[mxN]={0}, a[mxN], b[mxN];
int n, m;

bool dp(int bitmask) {
	if(target[bitmask]==n) return 1;
	if(memo	[bitmask]!=-1) return memo[bitmask];
int bit=1;
	for(int i=0; i<m; ++i, bit<<=1ll) {
		
		if(bitmask & bit) continue;
		int curr=left_[bitmask] + b[i];
		if(curr>a[target[bitmask]]) continue;
		if(curr==a[target[bitmask]]) {
			target[bitmask|bit] = target[bitmask] + 1;
			if(dp(bitmask|bit)) return memo[bitmask]=1;
		} 
		else {
			target[bitmask|bit] = target[bitmask];
			left_[bitmask|bit] = curr;
			if(dp(bitmask|bit)) return memo[bitmask]=1;
		}	
	}
	return memo[bitmask]=0;
}

void solve() {
	memset(memo, -1, sizeof(memo));
	read(n, m);
	FOR(n) read(a[i]);
	FOR(m) read(b[i]);
	print(dp(0));
} 

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int t=1;
	//read(t);
	FOR(t) {
		solve();
	}
} 

Compilation message

bank.cpp: In function 'bool dp(long long int)':
bank.cpp:244:44: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  244 |    if(dp(bitmask|bit)) return memo[bitmask]=1;
      |                               ~~~~~~~~~~~~~^~
bank.cpp:249:44: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  249 |    if(dp(bitmask|bit)) return memo[bitmask]=1;
      |                               ~~~~~~~~~~~~~^~
bank.cpp:252:22: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
  252 |  return memo[bitmask]=0;
      |         ~~~~~~~~~~~~~^~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 8532 KB Output is correct
2 Correct 4 ms 8540 KB Output is correct
3 Correct 4 ms 8472 KB Output is correct
4 Correct 4 ms 8532 KB Output is correct
5 Correct 4 ms 8532 KB Output is correct
6 Correct 4 ms 8540 KB Output is correct
7 Correct 4 ms 8532 KB Output is correct
8 Correct 4 ms 8664 KB Output is correct
9 Correct 298 ms 24944 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 8532 KB Output is correct
2 Correct 4 ms 8536 KB Output is correct
3 Correct 4 ms 8660 KB Output is correct
4 Correct 4 ms 8532 KB Output is correct
5 Correct 3 ms 8540 KB Output is correct
6 Correct 4 ms 8532 KB Output is correct
7 Correct 4 ms 8532 KB Output is correct
8 Correct 4 ms 8532 KB Output is correct
9 Correct 4 ms 8532 KB Output is correct
10 Correct 4 ms 8532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 8660 KB Output is correct
2 Correct 4 ms 8660 KB Output is correct
3 Correct 4 ms 8668 KB Output is correct
4 Correct 4 ms 8536 KB Output is correct
5 Correct 4 ms 8536 KB Output is correct
6 Correct 4 ms 8532 KB Output is correct
7 Correct 4 ms 8788 KB Output is correct
8 Correct 4 ms 8796 KB Output is correct
9 Correct 4 ms 8660 KB Output is correct
10 Correct 4 ms 8660 KB Output is correct
11 Correct 5 ms 8788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 8532 KB Output is correct
2 Correct 4 ms 8540 KB Output is correct
3 Correct 4 ms 8472 KB Output is correct
4 Correct 4 ms 8532 KB Output is correct
5 Correct 4 ms 8532 KB Output is correct
6 Correct 4 ms 8540 KB Output is correct
7 Correct 4 ms 8532 KB Output is correct
8 Correct 4 ms 8664 KB Output is correct
9 Correct 298 ms 24944 KB Output is correct
10 Correct 4 ms 8532 KB Output is correct
11 Correct 4 ms 8536 KB Output is correct
12 Correct 4 ms 8660 KB Output is correct
13 Correct 4 ms 8532 KB Output is correct
14 Correct 3 ms 8540 KB Output is correct
15 Correct 4 ms 8532 KB Output is correct
16 Correct 4 ms 8532 KB Output is correct
17 Correct 4 ms 8532 KB Output is correct
18 Correct 4 ms 8532 KB Output is correct
19 Correct 4 ms 8532 KB Output is correct
20 Correct 3 ms 8660 KB Output is correct
21 Correct 4 ms 8660 KB Output is correct
22 Correct 4 ms 8668 KB Output is correct
23 Correct 4 ms 8536 KB Output is correct
24 Correct 4 ms 8536 KB Output is correct
25 Correct 4 ms 8532 KB Output is correct
26 Correct 4 ms 8788 KB Output is correct
27 Correct 4 ms 8796 KB Output is correct
28 Correct 4 ms 8660 KB Output is correct
29 Correct 4 ms 8660 KB Output is correct
30 Correct 5 ms 8788 KB Output is correct
31 Correct 4 ms 8660 KB Output is correct
32 Correct 4 ms 8660 KB Output is correct
33 Correct 6 ms 14036 KB Output is correct
34 Correct 4 ms 9184 KB Output is correct
35 Correct 5 ms 10068 KB Output is correct
36 Correct 5 ms 9044 KB Output is correct
37 Correct 5 ms 9556 KB Output is correct
38 Correct 4 ms 8472 KB Output is correct
39 Correct 4 ms 8532 KB Output is correct
40 Correct 4 ms 8800 KB Output is correct
41 Correct 4 ms 9044 KB Output is correct
42 Correct 114 ms 24980 KB Output is correct
43 Correct 10 ms 16096 KB Output is correct
44 Correct 4 ms 8540 KB Output is correct
45 Correct 4 ms 8916 KB Output is correct
46 Correct 9 ms 16468 KB Output is correct
47 Correct 4 ms 9044 KB Output is correct
48 Correct 4 ms 8556 KB Output is correct
49 Correct 4 ms 8804 KB Output is correct
50 Correct 4 ms 8540 KB Output is correct
51 Correct 4 ms 9556 KB Output is correct
52 Correct 4 ms 8660 KB Output is correct
53 Correct 4 ms 8532 KB Output is correct
54 Correct 4 ms 8532 KB Output is correct
55 Correct 4 ms 8532 KB Output is correct
56 Correct 4 ms 8536 KB Output is correct
57 Correct 240 ms 23932 KB Output is correct
58 Correct 4 ms 8532 KB Output is correct