제출 #1213145

#제출 시각아이디문제언어결과실행 시간메모리
1213145thelegendary08비스킷 담기 (IOI20_biscuits)C++17
21 / 100
1095 ms656 KiB
#include "biscuits.h"
#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define vi vector<int>
#define f0r(i,n) for(int i = 0; i<n; i++)
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define dout(x) cout<<x<<' '<<#x<<'\n';
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define vb vector<bool>
using namespace std;
long long count_tastiness(long long x, std::vector<long long> a) {
	int n = a.size();
	if(x == 1){
		long long cur = 1;
		long long ans = 1;
		long long mult = 1;
		f0r(i, n){
			if(a[i] == 0){
				if(cur != 1){
					ans *= cur;
					cur = 1;
					mult = 1;
				}
			}
			else{
				cur += mult * a[i];
				mult *= 2;
			}
		}
		if(cur != 0){
			ans *= cur;
			cur = 1;
			mult = 1;
		}
		return ans;
	}
	else{
		long long sum = 0;
		f0r(i, n){
			sum += a[i] * (1LL << i);
		}
		long long ans = 1;
		for(long long i = 1; i <= sum / x; i++){
			vector<long long> tmp = a;
			bool ok = 1;
			f0r(j, x){
				long long cur = i;
				for(int k = n - 1; k>=0; k--){
					if((1LL << k) <= cur){
						int cnt = min(tmp[k], cur / (1LL << k));
						cur -= cnt * (1LL << k);
						tmp[k] -= cnt;
					}
				}
				if(cur != 0){
					ok = 0; break;
				}
			}
			if(ok)ans++;
		}
		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...