Submission #385291

#TimeUsernameProblemLanguageResultExecution timeMemory
385291rqiKitchen (BOI19_kitchen)C++14
31 / 100
4 ms384 KiB
#include <bits/stdc++.h>
using namespace std;

void ckmin(int& a, int b){
	a = min(a, b);
}

const int MOD = 1e9+7;

const int mx = 305;
int N, M, K;

int Asum = 0;
int A[mx];
int B[mx];
int Bp[mx];

int main(){
	cin >> N >> M >> K;
	for(int i = 0; i < N; i++){
		cin >> A[i];
		Asum+=A[i];
	}
	for(int i = 0; i < M; i++){
		cin >> B[i];
	}

	for(int i = 0; i < N; i++){
		if(A[i] < K){
			cout << "Impossible" << "\n";
			exit(0);
		}
	}

	for(int i = 0; i < M; i++){
		Bp[i] = min(B[i], N);
	}

	if(M <= 15){
		int ans = MOD;
		for(int i = 0; i < (1<<M); i++){
			int Bsum = 0;
			int Bpsum = 0;

			for(int j = 0; j < M; j++){
				if((i>>j)&1){
					Bsum+=B[j];
					Bpsum+=Bp[j];
				}
			}

			if(Bsum >= Asum && Bpsum >= N*K){
				ckmin(ans, Bsum);
			}
		}

		if(ans == MOD){
			cout << "Impossible" << "\n";
		}
		else{
			cout << ans-Asum << "\n";
		}
		exit(0);
	}
	

	

}
#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...