답안 #726844

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
726844 2023-04-19T12:22:58 Z TimDee Kitchen (BOI19_kitchen) C++17
51 / 100
81 ms 724 KB
#include <bits/stdc++.h>
using namespace std;

//#define int long long
#define forn(i,n) for(int i=0;i<n;++i)
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define f first
#define s second
#define pi pair<int,int>

#define vii(a,n) vector<int>a(n);forn(i,n)cin>>a[i];

const int inf = 1e9;

void solve() {

	int n,m,k; cin>>n>>m>>k;
	vii(a,n);
	vii(b,m);

	if (k==1) {
		vector<int> dp(1e5,0);
		dp[0]=1;
		int s=0; forn(i,n) s+=a[i];
		for(auto&x:b) {
			for (int i=9e4; i>=0; --i) {
				dp[i+x]|=dp[i];
			}
		}
		for (int i=s; i<1e5; ++i) {
			if (dp[i]) {
				cout<<i-s;
				return;
			}
		}
		cout<<"Impossible";
		return;
	}
	if (m>15) exit(0);
	
	if (k>m) {
		cout<<"Impossible";
		return;
	}
	forn(i,n) if (a[i]<k) {
		cout<<"Impossible";
		return;
	}
	int s=0;
	for(auto&x:a) s+=x;
	for(auto&x:b) s-=x;
	if (s>0) {
		cout<<"Impossible";
		return;
	}

	int z=0;
	for(auto&x:a) z+=x;

	int ans=inf;

	for (int mask=0; mask<(1<<m); ++mask) {
		if (__builtin_popcount(mask) < k) continue;
		vector<int> f;
		forn(i,m) if ((mask>>i)&1) f.pb(b[i]);
		int sum=0;
		for(auto&x:f) sum+=x;
		if (sum<z) continue;
		sort(rall(f));
		forn(i,n) {
			forn(j,k) f[j]--;
			sort(rall(f));
		}
		if (f.back()<0) continue;
		ans=min(ans,sum-z);
	}
	if (ans==inf) cout<<"Impossible";
	else cout<<ans;

}

int32_t main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 700 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 316 KB Output is correct
8 Correct 1 ms 704 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 700 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 316 KB Output is correct
8 Correct 1 ms 704 KB Output is correct
9 Correct 3 ms 212 KB Output is correct
10 Correct 9 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 6 ms 212 KB Output is correct
13 Correct 13 ms 320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 80 ms 724 KB Output is correct
2 Correct 64 ms 724 KB Output is correct
3 Correct 81 ms 724 KB Output is correct
4 Correct 80 ms 724 KB Output is correct
5 Correct 41 ms 724 KB Output is correct
6 Correct 61 ms 724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 596 KB Output is correct
2 Correct 1 ms 700 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 596 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 316 KB Output is correct
8 Correct 1 ms 704 KB Output is correct
9 Correct 3 ms 212 KB Output is correct
10 Correct 9 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 6 ms 212 KB Output is correct
13 Correct 13 ms 320 KB Output is correct
14 Correct 80 ms 724 KB Output is correct
15 Correct 64 ms 724 KB Output is correct
16 Correct 81 ms 724 KB Output is correct
17 Correct 80 ms 724 KB Output is correct
18 Correct 41 ms 724 KB Output is correct
19 Correct 61 ms 724 KB Output is correct
20 Incorrect 1 ms 212 KB Output isn't correct
21 Halted 0 ms 0 KB -