Submission #1220834

#TimeUsernameProblemLanguageResultExecution timeMemory
1220834brinton비스킷 담기 (IOI20_biscuits)C++20
100 / 100
27 ms948 KiB
#include "biscuits.h"
#include <bits/stdc++.h>
using namespace std;
/*
key: all prefix is less than -> valid solution

*/
long long count_tastiness(long long x, vector<long long> a) {
	a.resize(60);
	vector<long long> sum(60,0);
	for(int i = 0;i < 60;i++){
		if(i > 0) sum[i] = sum[i-1];
		sum[i] += a[i]*(1LL << i);
	}

	vector<long long> limit(60);
	for(int i = 0;i < 60;i++){
		limit[i] = min((1LL<<(i+1))-1,sum[i]/x);
	}
	map<long long,long long> mp;
	mp[(1L << 60)-1] = 1;
	for(int i = 59;i >= 0;i--){
		map<long long,long long> nmp;
		for(auto &[rclim,rcnt]:mp){
			long long clim = rclim,cnt = rcnt;
			clim = min(clim,limit[i]);
			if(clim >= (1LL << i)){
				nmp[(1LL << i)-1] += cnt;
				clim -= (1LL << i);
			}
			nmp[clim] += cnt;
		}
		swap(mp,nmp);
	}

	long long tot = 0;
	for(auto [clim,cnt]:mp){
		tot += cnt;
	}
	return tot;
}


#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...