제출 #328636

#제출 시각아이디문제언어결과실행 시간메모리
328636soroushKitchen (BOI19_kitchen)C++14
51 / 100
22 ms492 KiB
/* #pragma GCC optimize("O2") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx,avx2,sse,sse2,fma,tune=native") //*/ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int ,int > pii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll maxn = 400; const ll mod =1e9+7; const ld PI = acos((ld)-1); #define pb push_back #define endl '\n' #define dokme(x) cout << x , exit(0) #define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define ms(x , y) memset(x , y , sizeof x) ll pw(ll a, ll b, ll md = mod){ll res = 1;while(b){if(b&1){res=(a*res)%md;}a=(a*a)%md;b>>=1;}return(res);} int n , m , k; int a[maxn]; int b[maxn]; int suma = 0 , sumb = 0; priority_queue < int > pq; int vec[maxn]; void sub3(){ bitset < 90100 > dp; dp = 1; for(int i = 0 ; i < m ; i ++) dp|= (dp << b[i]); for(int i = suma ; ; i ++) if(dp[i]) dokme(i - suma); } void sub2(){ int mn = 1e9; for(int i = 0 ; i < (1 << m) ; i ++){ if(__builtin_popcount(i) < k)continue; int sum = 0; for(int j = 0 ; j < m ; j ++ )if(i&(1 << j))sum+=b[j]; if(sum < suma)continue; while(pq.size())pq.pop(); for(int j = 0 ; j < m ; j ++ )if(i&(1 << j))pq.push(b[j]); int ok = 1; for(int i = 0 ; i < n ; i ++ ){ int cnt = 0; if(pq.size() < k){ok = 0;break;} for(int i = 0 ; i < k ; i ++){ int x = pq.top(); pq.pop(); x--; if(x)vec[++cnt] = x; } for(int i = 1 ; i <= cnt ; i ++)pq.push(vec[i]); } if(ok) mn = min(mn , sum - suma); } if(mn == 1e9)dokme("Impossible"); dokme(mn); } int32_t main(){ migmig; cin >> n >> m >> k; for(int i = 0 ; i < n ; i ++) cin >> a[i], suma+=a[i]; for(int i = 0 ; i < m ; i ++) cin >> b[i], sumb+=b[i]; sort(a , a + n); sort(b , b + m); if(m < k)dokme("Impossible"); if(*min_element(a , a + n) < k)dokme("Impossible"); if(suma > sumb)dokme("Impossible"); if(k == 1) sub3(); if(m <= 15) sub2(); return(0); }

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

kitchen.cpp: In function 'void sub2()':
kitchen.cpp:58:17: warning: comparison of integer expressions of different signedness: 'std::priority_queue<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   58 |    if(pq.size() < k){ok = 0;break;}
      |       ~~~~~~~~~~^~~
#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...