답안 #298435

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
298435 2020-09-12T21:01:27 Z peuch Kitchen (BOI19_kitchen) C++17
0 / 100
1 ms 384 KB
#include<bits/stdc++.h>
using namespace std;

const int MAXN = 310;

int n, m, k;
int a[MAXN], b[MAXN];
int sum;
vector<int> aux;
int marc[MAXN * MAXN];

int main(){
	scanf("%d %d %d", &n, &m, &k);
	for(int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		sum += a[i];
	}
	sort(a + 1, a + 1 + n);
	for(int i = 1; i <= m; i++) scanf("%d", &b[i]);
	if(k > m) {
		printf("Impossible\n");
		return 0;
	}
	if(k == m && m == 2) {
		if(b[1] >= n && b[2] >= n && b[1] + b[2] >= sum){
			printf("%d\n", b[1] + b[2] - sum);
			return 0;
		}
		printf("Impossible\n");
		return 0;
	}
	else if(k == m && m == 1){
		if(b[1] >= sum){
			printf("%d\n", b[1] - sum);
			return 0;
		}
		printf("Impossible\n");
		return 0;
	}
	else if(m == k + 1){
		if(b[1] >= sum && b[2] >= sum){
			printf("%d\n", min(b[1], b[2]) - sum);
			return 0;
		}
		else if(b[1] >= sum || b[2] >= sum){
			printf("%d\n", max(b[1], b[2]) - sum);
			return 0;
		}
		else{
			aux.push_back(0);
			for(int i = 1; i <= n; i++){
				queue<int> aux2;
				for(int j = 0; j < aux.size(); j++){
					if(marc[aux[j] + a[i]]) continue;
					marc[aux[j] + a[i]] = 1;
					aux2.push(aux[j] + a[i]);
				}
				while(!aux2.empty()) {
					aux.push_back(aux2.front());
					aux2.pop();
				}
			}
			sort(aux.begin(), aux.end());
			int k = upper_bound(aux.begin(), aux.end(), b[1]) - aux.begin() - 1;
			if(b[2] >= sum - aux[k]){
				printf("%d\n", b[1] + b[2] - sum);
				return 0;
			}
			else{
				printf("Impossible\n");
				return 0;
			}
		}
	}
	printf("Impossible\n");
	return 0;
}

Compilation message

kitchen.cpp: In function 'int main()':
kitchen.cpp:53:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for(int j = 0; j < aux.size(); j++){
      |                    ~~^~~~~~~~~~~~
kitchen.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   13 |  scanf("%d %d %d", &n, &m, &k);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
kitchen.cpp:15:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   15 |   scanf("%d", &a[i]);
      |   ~~~~~^~~~~~~~~~~~~
kitchen.cpp:19:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   19 |  for(int i = 1; i <= m; i++) scanf("%d", &b[i]);
      |                              ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 256 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Incorrect 1 ms 256 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 256 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Incorrect 1 ms 256 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 256 KB Output is correct
3 Correct 0 ms 256 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 256 KB Output is correct
7 Incorrect 1 ms 256 KB Output isn't correct
8 Halted 0 ms 0 KB -