Submission #608226

#TimeUsernameProblemLanguageResultExecution timeMemory
608226Theo830Packing Biscuits (IOI20_biscuits)C++17
0 / 100
1 ms384 KiB
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll INF = 1e9+7;
    const ll MOD = 998244353;
    typedef pair<ll,ll> ii;
    #define iii pair<ll,ii>
    #define f(i,a,b) for(ll i = a;i < b;i++)
    #define pb push_back
    #define vll vector<ll>
    #define F first
    #define S second
    #define all(x) (x).begin(), (x).end()
    ///I hope I will get uprating and don't make mistakes
    ///I will never stop programming
    ///sqrt(-1) Love C++
    ///Please don't hack me
    ///@TheofanisOrfanou Theo830
    ///Think different approaches (bs,dp,greedy,graphs,shortest paths,mst)
    ///Stay Calm
    ///Look for special cases
    ///Beware of overflow and array bounds
    ///Think the problem backwards
    ///Training
    #include "biscuits.h"
    long long count_tastiness(long long x, vector<long long> A){
        ll ans = 1;
        ll k = A.size();
        ll a[62] = {0};
        f(i,0,k){
            a[i] = A[i];
        }
      	f(i,0,61){
          	if(a[i] >= x){
              	a[i+1] += (a[i] - x) / 2;
              	a[i] = 1;
            }
          	else{
             	a[i+1] += a[i] / 2;
              	a[i] = 0;
            }
        }
      	x = 1;
        ll pos = 0;
        while(pos < 62){
            if(a[pos] > 0){
                ll posa = a[pos];
                posa /= 2;
                ll sum = a[pos] / x;
                ll extra = a[pos] % x;
                extra /= 2;
                ll f = pos;
                while(posa){
                    pos++;
                    extra += a[pos];
                    sum += (extra / x) * (1LL<<(pos - f));
                    extra %= x;
                    posa += a[pos];
                    posa /= 2;
                    extra /= 2;
                }
                ans *= (sum + 1);
            }
            pos++;
        }
        return ans;
    }
#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...