Submission #479997

#TimeUsernameProblemLanguageResultExecution timeMemory
479997stefantagaPacking Biscuits (IOI20_biscuits)C++14
12 / 100
2 ms332 KiB
#include "biscuits.h" #include <cassert> #include <cstdio> using namespace std; long long sum=0,cop[65],din[65]; long long brut(long long x,std::vector <long long> a ) { int k=a.size(); long long p=1,suma=0,lim,t,ok1; for (int i=0;i<k;i++) { suma=suma+p*a[i]; p=p*2; } long long lim2=suma/x,sum1=0; for (lim=0;lim<=lim2;lim++) { for (t=0;t<k;t++) { cop[t]=a[t]; } p=1; ok1=1; for (t=0;t<k;t++) { if ((lim&p)!=0) { cop[t]=cop[t]-x; if (cop[t]<0) { ok1=0; break; } } cop[t+1]+=(cop[t]/2); p=p*2; } sum1=sum1+ok1; } return sum1; } void merge_biscuits(vector<long long> &a) { while(a.size()<61) a.push_back(0); for(int i=0; i<(int)a.size(); i++) { if(a[i]>2) { a[i+1] += (a[i]-1)/2; a[i] = (a[i]%2 ? 1 : 2); } } } long long count_tastiness(long long x, std::vector<long long> a) { merge_biscuits(a); long long ans = 1; long long current = 0; for(int i=60; i>=0; i--) { if(a[i]==0) { ans *= (current+1); current = 0; } else { current = current*2 + a[i]; } } ans *= (current+1); return ans; } #ifdef HOME int main() { int q; assert(scanf("%d", &q) == 1); vector<int> k(q); vector<long long> x(q); vector<vector<long long>> a(q); vector<long long> results(q),results2(q); for (int t = 0; t < q; t++) { assert(scanf("%d%lld", &k[t], &x[t]) == 2); a[t] = vector<long long>(k[t]); for (int i = 0; i < k[t]; i++) { assert(scanf("%lld", &a[t][i]) == 1); } } fclose(stdin); for (int t = 0; t < q; t++) { results2[t]= brut(x[t],a[t]); results[t] = count_tastiness(x[t], a[t]); } for (int t = 0; t < q; t++) { printf("%lld\n", results[t]); } for (int t = 0; t < q; t++) { printf("%lld\n", results2[t]); } fclose(stdout); return 0; } #endif // HOME
#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...