Submission #402647

#TimeUsernameProblemLanguageResultExecution timeMemory
402647Nicholas_PatrickKitchen (BOI19_kitchen)C++17
9 / 100
130 ms13544 KiB
#include <cstdio> #include <queue> #include <bitset> #include <algorithm> using namespace std; const int maxall=300; const int maxrow=maxall*maxall+1; int main(){ int n, m, k; scanf("%d%d%d", &n, &m, &k); vector<int> a(n), b(m); int A=0; for(int& i: a){ scanf("%d", &i); A+=i; } for(int& i: b) scanf("%d", &i); if(*min_element(a.begin(), a.end())<k){ printf("Impossible\n"); return 0; } sort(b.begin(), b.end()); auto it=upper_bound(b.begin(), b.end(), n); bitset<maxrow> smallsums; smallsums[0]=true; for(auto i=b.begin(); i!=it; i++) smallsums|=smallsums<<*i; bitset<maxrow*(maxall+1)> mask; for(int i=0; i<maxrow; i++) mask[i+maxrow*min(i/n, maxall)]=smallsums[i]; //bottleneck for(auto i=it; i!=b.end(); i++) mask|=mask<<(maxrow+*i)|mask<<*i; for(int i=A; i<maxrow; i++){ if(mask[i+k*maxrow]){ printf("%d\n", i-A); return 0; } } printf("Impossible\n"); }

Compilation message (stderr)

kitchen.cpp: In function 'int main()':
kitchen.cpp:11:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |  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", &i);
      |   ~~~~~^~~~~~~~~~
kitchen.cpp:19:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |   scanf("%d", &i);
      |   ~~~~~^~~~~~~~~~
#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...