#include "biscuits.h"
#include <bits/stdc++.h>
#ifndef EVAL
#include "grader.cpp"
#endif
using ll = long long;
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::string;
using vi = vector<ll>;
using vii = vector<vi>;
using pii = std::pair<ll,ll>;
#define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++)
#define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++)
#define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--)
#define ln "\n"
#define pb emplace_back
#define mp std::make_pair
#define mtp std::make_tuple
#define all(a) a.begin(), a.end()
constexpr ll inf = (1ll<<60);
ll subtask_1_2_3(ll x, vi a){
ll k = a.size();
while(k <= 60){
a.pb(0);
k++;
}
//assert(x <= 10000);
vi remain(1,0), val(1,1);
rep(i,0,k){
vector<pii> data;
rep(j,0,remain.size()){
data.pb(mp((remain[j]+a[i])/2, val[j]));
if(remain[j]+a[i] >= x){
data.pb(mp((remain[j]+a[i]-x)/2, val[j]));
}
}
sort(all(data));
remain.clear();
val.clear();
remain.pb(data[0].first);
val.pb(0);
for(auto el: data){
if(el.first == remain.back()) val[val.size()-1] += el.second;
else{
remain.pb(el.first);
val.pb(el.second);
}
}
}
ll ans = 0;
for(auto el: val) ans += el;
return ans;
}
long long count_tastiness(long long x, std::vector<long long> a) {
//if(x <= 10000) return subtask_1_2_3(x,a);
ll k = a.size();
while(k <= 60){
a.pb(0);
k++;
}
vi sum(k);
rep(i,0,k){
if(i) sum[i] = sum[i-1];
sum[i] += (1ll<<i)*a[i];
}
vi dp(k);
vi require(k);
rep(i,0,k){
if(sum[i]/(1ll<<i) < x){
require[i] = -1;
continue;
}
else{
require[i] = (sum[i]-(1ll<<i)*x)/x;
}
}
per(i,k-1,0){
if(require[i] == -1) continue;
//cout << i << " "<< require[i] << ln;
dp[i]++;
/*if(require[i] >= (1ll<<i)){
rep(j,0,i){
if(require[j] != -1) dp[j] += dp[i];
}
continue;
}*/
ll cnt = 0;
per(j,i-1,0){
if(require[j] != -1){
dp[j] += cnt*dp[i];
}
if(require[i] >= (1ll<<j)){
if(require[j] == -1){
rep(k,0,j){
if(require[k] != -1){
dp[k] += (cnt+1)*dp[i];
}
}
break;
}
require[i] -= (1ll<<j);
if(require[i] >= require[j]){
dp[j] += dp[i];
rep(k,0,j){
if(require[k] != -1){
dp[k] += (cnt+1)*dp[i];
}
}
break;
}
cnt++;
}
}
dp[i] *= (cnt+1);
}
ll ans = 1;
rep(i,0,k){
if(require[i] == -1) continue;
//cout << i << " " << dp[i] << ln;
ans += dp[i];
}
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
0 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
0 ms |
212 KB |
Output is correct |
13 |
Correct |
1 ms |
212 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
0 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
340 KB |
Output is correct |
2 |
Correct |
7 ms |
1108 KB |
Output is correct |
3 |
Correct |
9 ms |
1108 KB |
Output is correct |
4 |
Correct |
7 ms |
1108 KB |
Output is correct |
5 |
Correct |
8 ms |
1108 KB |
Output is correct |
6 |
Correct |
7 ms |
1108 KB |
Output is correct |
7 |
Correct |
7 ms |
1108 KB |
Output is correct |
8 |
Correct |
7 ms |
1108 KB |
Output is correct |
9 |
Correct |
7 ms |
1108 KB |
Output is correct |
10 |
Correct |
6 ms |
1108 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
0 ms |
212 KB |
Output is correct |
10 |
Correct |
1 ms |
212 KB |
Output is correct |
11 |
Correct |
1 ms |
212 KB |
Output is correct |
12 |
Correct |
0 ms |
212 KB |
Output is correct |
13 |
Correct |
1 ms |
212 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
0 ms |
212 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 ms |
212 KB |
Output is correct |
20 |
Correct |
1 ms |
212 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
212 KB |
Output is correct |
23 |
Correct |
1 ms |
212 KB |
Output is correct |
24 |
Correct |
1 ms |
212 KB |
Output is correct |
25 |
Correct |
1 ms |
212 KB |
Output is correct |
26 |
Correct |
0 ms |
212 KB |
Output is correct |
27 |
Correct |
0 ms |
212 KB |
Output is correct |
28 |
Correct |
0 ms |
212 KB |
Output is correct |
29 |
Correct |
1 ms |
212 KB |
Output is correct |
30 |
Correct |
1 ms |
212 KB |
Output is correct |
31 |
Correct |
1 ms |
212 KB |
Output is correct |
32 |
Correct |
0 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
1 ms |
212 KB |
Output is correct |
35 |
Correct |
1 ms |
212 KB |
Output is correct |
36 |
Correct |
1 ms |
212 KB |
Output is correct |
37 |
Correct |
2 ms |
340 KB |
Output is correct |
38 |
Correct |
7 ms |
1108 KB |
Output is correct |
39 |
Correct |
9 ms |
1108 KB |
Output is correct |
40 |
Correct |
7 ms |
1108 KB |
Output is correct |
41 |
Correct |
8 ms |
1108 KB |
Output is correct |
42 |
Correct |
7 ms |
1108 KB |
Output is correct |
43 |
Correct |
7 ms |
1108 KB |
Output is correct |
44 |
Correct |
7 ms |
1108 KB |
Output is correct |
45 |
Correct |
7 ms |
1108 KB |
Output is correct |
46 |
Correct |
6 ms |
1108 KB |
Output is correct |
47 |
Correct |
3 ms |
340 KB |
Output is correct |
48 |
Correct |
9 ms |
1316 KB |
Output is correct |
49 |
Correct |
5 ms |
340 KB |
Output is correct |
50 |
Correct |
8 ms |
1108 KB |
Output is correct |
51 |
Correct |
7 ms |
1236 KB |
Output is correct |
52 |
Correct |
2 ms |
340 KB |
Output is correct |
53 |
Correct |
6 ms |
1108 KB |
Output is correct |
54 |
Correct |
9 ms |
1108 KB |
Output is correct |
55 |
Correct |
11 ms |
1108 KB |
Output is correct |
56 |
Correct |
8 ms |
1108 KB |
Output is correct |
57 |
Correct |
8 ms |
1108 KB |
Output is correct |