답안 #730400

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
730400 2023-04-25T19:55:19 Z danikoynov 비스킷 담기 (IOI20_biscuits) C++14
100 / 100
14 ms 1336 KB
#include "biscuits.h"
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const ll maxk = 63;
ll n, dp[maxk], b[maxk];

/*long long count_tastiness(long long x, vector<long long> a)
{
    a.resize(20);
    n = a.size();
    ll sum = 0;
    for (int i = 0; i < n; i ++)
    {
        sum += a[i] * ((ll)(1) << i);
    }

    ll ans = 0;
    for (ll d = 0; d <= sum; d ++)
    {
        for (int i = 0; i < 20; i ++)
            b[i] = a[i];

            bool tf = true;
        for (ll bit = 0; bit < 20; bit ++)
        {
            ///cout << bit << " : " << b[bit] << endl;
            if ((d & (1 << bit)) > 0)
            {
                ///cout << "yes" << endl;
                if (b[bit] < x)
                {
                    tf = false;
                    break;
                }
                b[bit] -= x;
            }
            b[bit + 1] = b[bit + 1] + b[bit] / 2;
        }
        ///cout << d << " " << tf << endl;
        if (tf)
            ans ++;
    }
    ///cout << ans << endl;

    return ans;
}*/

long long count_tastiness(long long x, vector<long long> a)
{
    a.resize(maxk);
    n = a.size();


    b[0] = a[0];
    for (int i = 1; i < maxk; i ++)
    {
        b[i] = b[i - 1] / 2 + a[i];
    }

    dp[0] = 1;
   if (a[0] >= x)
        dp[0] ++;
    for (ll i = 1; i < maxk; i ++)
    {
        dp[i] = 0;
        if (b[i] < x)
        {
            ///cout << "here " << i << " " << b[i] << " " << x << endl;
            dp[i] = dp[i - 1];
            continue;
        }

        dp[i] = dp[i - 1];

        ll nec = max((ll)(0), (x - a[i])) * 2;
        for (int j = i - 1; j >= 0; j --)
        {
            if (b[j] >= x + nec)
            {
                ///cout << i << " : " << j << endl;
                if (j == 0)
                    dp[i] ++;
                else
                    dp[i] = dp[i] + dp[j - 1];
                    ///cout << "here " << nec << " " << a[j] << endl;
                nec = max((ll)(0), (nec + x - a[j])) * 2;
            }
            else
            {
                ///cout << "bad " << i << " " << j << " " << nec << endl;
                nec = max((ll)(0), (nec - a[j])) * 2;
            }
        }
        dp[i] ++;

    }
    /**for (int j = 0; j < 7; j ++)
        cout << dp[j] << " ";
    cout << endl;*/

    return dp[maxk - 1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 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 1 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
14 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 304 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 1 ms 296 KB Output is correct
5 Correct 1 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 304 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 296 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 1 ms 340 KB Output is correct
2 Correct 8 ms 1208 KB Output is correct
3 Correct 8 ms 1108 KB Output is correct
4 Correct 8 ms 1108 KB Output is correct
5 Correct 8 ms 1092 KB Output is correct
6 Correct 7 ms 1108 KB Output is correct
7 Correct 7 ms 1156 KB Output is correct
8 Correct 7 ms 1100 KB Output is correct
9 Correct 9 ms 1076 KB Output is correct
10 Correct 8 ms 1108 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 1 ms 212 KB Output is correct
4 Correct 1 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 1 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
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 304 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 304 KB Output is correct
24 Correct 1 ms 212 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 296 KB Output is correct
28 Correct 1 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 304 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 1 ms 296 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 1 ms 340 KB Output is correct
38 Correct 8 ms 1208 KB Output is correct
39 Correct 8 ms 1108 KB Output is correct
40 Correct 8 ms 1108 KB Output is correct
41 Correct 8 ms 1092 KB Output is correct
42 Correct 7 ms 1108 KB Output is correct
43 Correct 7 ms 1156 KB Output is correct
44 Correct 7 ms 1100 KB Output is correct
45 Correct 9 ms 1076 KB Output is correct
46 Correct 8 ms 1108 KB Output is correct
47 Correct 2 ms 340 KB Output is correct
48 Correct 10 ms 1324 KB Output is correct
49 Correct 3 ms 312 KB Output is correct
50 Correct 10 ms 1180 KB Output is correct
51 Correct 9 ms 1336 KB Output is correct
52 Correct 2 ms 340 KB Output is correct
53 Correct 8 ms 1108 KB Output is correct
54 Correct 11 ms 1144 KB Output is correct
55 Correct 10 ms 1080 KB Output is correct
56 Correct 9 ms 1188 KB Output is correct
57 Correct 14 ms 1100 KB Output is correct