답안 #520616

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
520616 2022-01-30T10:47:56 Z Vimmer Cigle (COI21_cigle) C++14
48 / 100
1000 ms 414676 KB
#include <bits/stdc++.h>
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)

//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-O3")

#define F first
#define S second
#define PB push_back
#define M ll(1e9 + 7)
#define sz(x) (ll)x.size()
#define N 1000500
#define pri(x) cout << x << endl
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define _ << " " <<

using namespace std;
//typedef tree <ll, null_type, less_equal <ll> , rb_tree_tag, tree_order_statistics_node_update> ordered_set;
//using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef short int si;
typedef unsigned long long ull;

int f[5005][5005][2];

vector <int> was[5005];

int pr[5005], now[5005][5005][2];

int main()
{
    istream::sync_with_stdio(0); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    memset(f, -1, sizeof f);

    int n;

    cin >> n;

    int a[n], ans = 0;

    for (int i = 0; i < n; i++)
        cin >> a[i];

    for (int i = 0; i < n; i++)
    {
        pr[i] = a[i];

        if (i)
            pr[i] += pr[i - 1];
    }

    for (int l = 0; l < n; l++)
        {
            int sum = 0;

            for (int r = l; r < n; r++)
            {
                sum += a[r];

                int L = r + 1, R = n - 1;

                while (L < R)
                {
                    int md = (L + R) >> 1;

                    if (pr[md] - pr[r] >= sum)
                        R = md;
                            else L = md + 1;
                }

                if (pr[L] - pr[r] == sum)
                    {
                        was[r].PB(L);
                    }
            }
        }

    for (int i = 0; i < n; i++)
        sort(all(was[i]));

    memset(now, -1, sizeof now);

    for (int i = 0; i < n; i++)
        f[0][i][0] = 0;

    for (int r = 0; r < n; r++)
        for (int l = 0; l <= r; l++)
                for (int t = 0; t < 2; t++)
                {
                    if (r)
                        now[l][r][t] = max(now[l][r][t], now[l][r - 1][t]);

                    f[l][r][t] = max(f[l][r][t], now[l][r][t]);

                    if (f[l][r][t] != -1)
                        {
                            int kl = f[l][r][t];

                            int sm = pr[r], cur = 0;

                            if (l)
                                sm -= pr[l - 1];

                            int i = 0, bn = 0;

                            for (int nw = r + 1; nw < n; nw++)
                            {
                                cur += a[nw];

                                if (bn)
                                {
                                    kl++;

                                    bn = 0;
                                }

                                while (i < sz(was[r]) && was[r][i] == nw)
                                {
                                    bn = 1;

                                    i++;
                                }

                                f[r + 1][nw][t ^ 1] = max(f[r + 1][nw][t ^ 1], kl);

                                ans = max(ans, kl);

                                if (sm <= cur)
                                {
                                    now[r + 1][nw][t ^ 1] = max(now[r + 1][nw][t ^ 1], kl);

                                    break;
                                }
                            }
                        }
                }

    pri(ans);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 392500 KB Output is correct
2 Correct 147 ms 392520 KB Output is correct
3 Correct 148 ms 392544 KB Output is correct
4 Correct 148 ms 392700 KB Output is correct
5 Correct 147 ms 392492 KB Output is correct
6 Correct 168 ms 392532 KB Output is correct
7 Correct 153 ms 392476 KB Output is correct
8 Correct 167 ms 392540 KB Output is correct
9 Correct 147 ms 392584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 392500 KB Output is correct
2 Correct 147 ms 392520 KB Output is correct
3 Correct 148 ms 392544 KB Output is correct
4 Correct 148 ms 392700 KB Output is correct
5 Correct 147 ms 392492 KB Output is correct
6 Correct 168 ms 392532 KB Output is correct
7 Correct 153 ms 392476 KB Output is correct
8 Correct 167 ms 392540 KB Output is correct
9 Correct 147 ms 392584 KB Output is correct
10 Correct 151 ms 392544 KB Output is correct
11 Correct 150 ms 392516 KB Output is correct
12 Correct 147 ms 392544 KB Output is correct
13 Correct 150 ms 392552 KB Output is correct
14 Correct 154 ms 392684 KB Output is correct
15 Correct 147 ms 392636 KB Output is correct
16 Correct 163 ms 392516 KB Output is correct
17 Correct 146 ms 392504 KB Output is correct
18 Correct 155 ms 392508 KB Output is correct
19 Correct 151 ms 392516 KB Output is correct
20 Correct 146 ms 392576 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 196 ms 392724 KB Output is correct
2 Correct 209 ms 392972 KB Output is correct
3 Correct 194 ms 392808 KB Output is correct
4 Correct 206 ms 392792 KB Output is correct
5 Correct 207 ms 392848 KB Output is correct
6 Correct 213 ms 392740 KB Output is correct
7 Correct 208 ms 392732 KB Output is correct
8 Correct 216 ms 392844 KB Output is correct
9 Correct 216 ms 392844 KB Output is correct
10 Correct 208 ms 392820 KB Output is correct
11 Correct 224 ms 392812 KB Output is correct
12 Correct 211 ms 392772 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 392500 KB Output is correct
2 Correct 147 ms 392520 KB Output is correct
3 Correct 148 ms 392544 KB Output is correct
4 Correct 148 ms 392700 KB Output is correct
5 Correct 147 ms 392492 KB Output is correct
6 Correct 168 ms 392532 KB Output is correct
7 Correct 153 ms 392476 KB Output is correct
8 Correct 167 ms 392540 KB Output is correct
9 Correct 147 ms 392584 KB Output is correct
10 Correct 151 ms 392544 KB Output is correct
11 Correct 150 ms 392516 KB Output is correct
12 Correct 147 ms 392544 KB Output is correct
13 Correct 150 ms 392552 KB Output is correct
14 Correct 154 ms 392684 KB Output is correct
15 Correct 147 ms 392636 KB Output is correct
16 Correct 163 ms 392516 KB Output is correct
17 Correct 146 ms 392504 KB Output is correct
18 Correct 155 ms 392508 KB Output is correct
19 Correct 151 ms 392516 KB Output is correct
20 Correct 146 ms 392576 KB Output is correct
21 Correct 196 ms 392724 KB Output is correct
22 Correct 209 ms 392972 KB Output is correct
23 Correct 194 ms 392808 KB Output is correct
24 Correct 206 ms 392792 KB Output is correct
25 Correct 207 ms 392848 KB Output is correct
26 Correct 213 ms 392740 KB Output is correct
27 Correct 208 ms 392732 KB Output is correct
28 Correct 216 ms 392844 KB Output is correct
29 Correct 216 ms 392844 KB Output is correct
30 Correct 208 ms 392820 KB Output is correct
31 Correct 224 ms 392812 KB Output is correct
32 Correct 211 ms 392772 KB Output is correct
33 Correct 221 ms 392764 KB Output is correct
34 Correct 197 ms 392808 KB Output is correct
35 Correct 201 ms 392748 KB Output is correct
36 Correct 199 ms 392844 KB Output is correct
37 Correct 206 ms 392836 KB Output is correct
38 Correct 221 ms 392936 KB Output is correct
39 Correct 203 ms 392604 KB Output is correct
40 Correct 186 ms 392592 KB Output is correct
41 Correct 199 ms 392744 KB Output is correct
42 Correct 214 ms 392644 KB Output is correct
43 Correct 204 ms 392572 KB Output is correct
44 Correct 183 ms 392496 KB Output is correct
45 Correct 190 ms 392516 KB Output is correct
46 Correct 190 ms 392588 KB Output is correct
47 Correct 188 ms 392592 KB Output is correct
48 Correct 195 ms 392608 KB Output is correct
49 Correct 189 ms 392556 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 392500 KB Output is correct
2 Correct 147 ms 392520 KB Output is correct
3 Correct 148 ms 392544 KB Output is correct
4 Correct 148 ms 392700 KB Output is correct
5 Correct 147 ms 392492 KB Output is correct
6 Correct 168 ms 392532 KB Output is correct
7 Correct 153 ms 392476 KB Output is correct
8 Correct 167 ms 392540 KB Output is correct
9 Correct 147 ms 392584 KB Output is correct
10 Correct 151 ms 392544 KB Output is correct
11 Correct 150 ms 392516 KB Output is correct
12 Correct 147 ms 392544 KB Output is correct
13 Correct 150 ms 392552 KB Output is correct
14 Correct 154 ms 392684 KB Output is correct
15 Correct 147 ms 392636 KB Output is correct
16 Correct 163 ms 392516 KB Output is correct
17 Correct 146 ms 392504 KB Output is correct
18 Correct 155 ms 392508 KB Output is correct
19 Correct 151 ms 392516 KB Output is correct
20 Correct 146 ms 392576 KB Output is correct
21 Correct 196 ms 392724 KB Output is correct
22 Correct 209 ms 392972 KB Output is correct
23 Correct 194 ms 392808 KB Output is correct
24 Correct 206 ms 392792 KB Output is correct
25 Correct 207 ms 392848 KB Output is correct
26 Correct 213 ms 392740 KB Output is correct
27 Correct 208 ms 392732 KB Output is correct
28 Correct 216 ms 392844 KB Output is correct
29 Correct 216 ms 392844 KB Output is correct
30 Correct 208 ms 392820 KB Output is correct
31 Correct 224 ms 392812 KB Output is correct
32 Correct 211 ms 392772 KB Output is correct
33 Correct 221 ms 392764 KB Output is correct
34 Correct 197 ms 392808 KB Output is correct
35 Correct 201 ms 392748 KB Output is correct
36 Correct 199 ms 392844 KB Output is correct
37 Correct 206 ms 392836 KB Output is correct
38 Correct 221 ms 392936 KB Output is correct
39 Correct 203 ms 392604 KB Output is correct
40 Correct 186 ms 392592 KB Output is correct
41 Correct 199 ms 392744 KB Output is correct
42 Correct 214 ms 392644 KB Output is correct
43 Correct 204 ms 392572 KB Output is correct
44 Correct 183 ms 392496 KB Output is correct
45 Correct 190 ms 392516 KB Output is correct
46 Correct 190 ms 392588 KB Output is correct
47 Correct 188 ms 392592 KB Output is correct
48 Correct 195 ms 392608 KB Output is correct
49 Correct 189 ms 392556 KB Output is correct
50 Execution timed out 1104 ms 414676 KB Time limit exceeded
51 Halted 0 ms 0 KB -