제출 #1262611

#제출 시각아이디문제언어결과실행 시간메모리
1262611blueviolet은행 (IZhO14_bank)C++20
71 / 100
1096 ms13120 KiB
#include             <bits/stdc++.h>
    
#define             ll   long long
#define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
#define        TimeRun   {End=clock();cerr<<"Time run: "<<(float)(End-Begin)/CLOCKS_PER_SEC<<"s"<<el;}
#define      mem(c, x)   memset(c, x, sizeof(c))
#define         all(c)   c.begin(), c.end()
#define       bit(i,j)   ((i >> j) & 1)
#define             se   second     
#define             fi   first
#define             el   '\n'
using namespace std;  

template<class X, class Y> bool maximize(X &a, const Y &b) { return (a < b ? a = b, 1 : 0); }
template<class X, class Y> bool minimize(X &a, const Y &b) { return (a > b ? a = b, 1 : 0); }

int dx[8] = {0, 1, 0,-1, 1, 1,-1,-1};
int dy[8] = {1, 0,-1, 0, 1,-1,-1, 1};
const int  maxn  = 22;
const int  Inf   = 2e9 + 7;
const ll   Infll = 1e18 + 9;
const ll   Mod   = 1e9 + 7;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int n, m, a[maxn], b[maxn];
ll pref[maxn], sum[1 << maxn];
vector<int> subOf[maxn];
bool dp[maxn][1 << maxn];

void solve() {
	cin >> n >> m;
	for (int i=1; i<=n; i++) cin >> a[i], pref[i] = pref[i-1] + a[i];
	for (int i=1; i<=m; i++) cin >> b[i];

	subOf[0].push_back(0);
	for (int mask=1; mask<(1 << m); mask++) {
		sum[mask] = sum[mask-(mask&-mask)] + b[__lg(mask&-mask) + 1];
	}
	for (int i=1; i<=n; i++) {
		for (int mask=1; mask<(1 << m); mask++) {
			if (sum[mask] == pref[i]) {
				subOf[i].push_back(mask);
			}
		}
	}

	dp[0][0] = true;
	for (int i=1; i<=n; i++) {
		for (int mask : subOf[i-1]) {
			if (!dp[i-1][mask]) continue;
			int left = ((1<<m)-1) ^ mask;
			for (int sub=left; sub; sub = (sub - 1)&left) {
				if (sum[sub] == a[i]) {
					dp[i][mask^sub] = 1;
					if (i == n) return void(cout << "YES");
				}
			}
		}
	}
	cout << "NO";
}

signed main() {
    
    ios_base::sync_with_stdio(false);  cin.tie(0); cout.tie(0); clock_t Begin = clock(), End;
    io("task"); 

    solve();
    
    TimeRun; return (0 ^ 0);
}

컴파일 시 표준 에러 (stderr) 메시지

bank.cpp: In function 'int main()':
bank.cpp:4:58: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    4 | #define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
      |                                                   ~~~~~~~^~~~~~~~~~~~~~~~~~~
bank.cpp:65:5: note: in expansion of macro 'io'
   65 |     io("task");
      |     ^~
bank.cpp:4:85: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    4 | #define          io(x)   if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);}
      |                                                                              ~~~~~~~^~~~~~~~~~~~~~~~~~~~
bank.cpp:65:5: note: in expansion of macro 'io'
   65 |     io("task");
      |     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...