답안 #1108995

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1108995 2024-11-05T18:34:32 Z Kerim 모자이크 (IOI24_mosaic) C++17
78 / 100
718 ms 108632 KB
#include "bits/stdc++.h"
#define ll long long
#define pb push_back
#define pii pair<int, int>
using namespace std;
const int N = 4e5+5;
int cnt[N], arcalyk[4][N];
const int M = 5005;
int dp[M][M];
int wow(int a, int b){
    return (!(a|b)?1:0);
}

vector<ll> mosaic(vector<int> X, vector<int> Y, vector<int> T, vector<int> B, vector<int> L, vector<int> R){
    int n = (int)X.size();
    assert(X.front()==Y.front());
    if (n <= 5000){
        for (int i = 0; i < n; i++)
            dp[1][i+1] = X[i];
        for (int i = 0; i < n; i++)
            dp[i+1][1] = Y[i];
        for (int i = 2; i <= n; i++)
            for (int j = 2; j <= n; j++)
                dp[i][j] = wow(dp[i-1][j], dp[i][j-1]);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                dp[i][j] += dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1];
        vector<ll> ans;
        for(int i = 0; i < (int)L.size(); ++i){
            int x = T[i]+1, y = L[i]+1, yy = R[i]+1, xx = B[i]+1;
            ans.push_back(dp[xx][yy] - dp[x-1][yy] - dp[xx][y-1] + dp[x-1][y-1]);
        }
        return ans;
    }
    bool ok = true;
    for (int i = 0; i < n; i++)
        ok &= X[i] == 0, ok &= Y[i] == 0;
    if (ok){
        vector<ll> ans;
        for(int i = 0; i < (int)L.size(); ++i){
            int x = T[i]+1, y = L[i]+1, yy = R[i]+1, xx = B[i]+1;
            if (x == 1)
                x += 1;
            if (y == 1)
                y += 1;
            ll rec = (xx-x+1)*1LL*(yy-y+1);
            if (rec % 2 == 0)
                ans.push_back(rec/2);
            else{
                if ((xx+yy)%2)
                    ans.push_back(rec/2);
                else
                    ans.push_back(rec/2+1);
            }
        }
        return ans;
    }
    map<pii, int> mp;
    for(int i = 1; i <= n; ++i)
        mp[{1, i}] = X[i-1], mp[{i, 1}] = Y[i-1];
    for(int i = 2; i <= n; ++i)
        for(int j = 2; j <= 3; ++j)
            mp[{i, j}] = wow(mp[{i-1, j}], mp[{i, j-1}]);
    for(int i = 2; i <= 3; ++i)
        for(int j = 2; j <= n; ++j)
            mp[{i, j}] = wow(mp[{i-1, j}], mp[{i, j-1}]);
    // int ii = 3;
    // for(int jj = 3; jj <= n; ++jj)
    //     cnt[ii-jj+n] = mp[{ii, jj}];
    for (auto [key, value]: mp)
        cnt[key.first-key.second+n] = value;
    for (int i = 1; i <= 3; i++)
        for (int j = 1; j <= n; j++)
            arcalyk[i][j] = mp[{i,j}] + arcalyk[i][j-1];
    for (int i = 1; i < n+n; i++)
        cnt[i] += cnt[i-1];
    vector<ll> ans;
    for(int i = 0; i < (int)L.size(); ++i){
        int x = T[i]+1, y = L[i]+1, yy = R[i]+1;
        if (x <= 3){
            ans.pb(arcalyk[x][yy]-arcalyk[x][y-1]);
            continue;
        }
        int res = 0;
        while (y <= 3 and y <= yy)
            res += mp[{x, y}], y += 1;
        if (y <= yy){
            int a = x-y+n, b = x-yy+n;
            res += cnt[a] - cnt[b-1];
        }
        ans.pb(res);
    }
    return ans;
}

// int main(){
//     int n;
//     scanf("%d", &n);
//     vector<int> X, Y;
//     for(int i = 1; i <= n; ++i){
//         int x;
//         scanf("%d", &x);
//         X.pb(x);
//     }
//     for(int i = 1; i <= n; ++i){
//         int x;
//         scanf("%d", &x);
//         Y.pb(x);
//     }
//     int q;
//     scanf("%d", &q);
//     vector<int> T, B, L, R;
//     while(q--){
//         int a, b, c, d;
//         scanf("%d%d%d%d", &a, &b, &c, &d);
//         T.pb(a), B.pb(b), L.pb(c), R.pb(d);
//     }
//     vector<ll> ans = mosaic(X, Y, T, B, L, R);
//     for(ll i : ans)
//         printf("%lld ", i);
//     puts("");
//     return 0;
// }
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 508 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 508 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 4432 KB Output is correct
12 Correct 2 ms 4432 KB Output is correct
13 Correct 2 ms 4432 KB Output is correct
14 Correct 2 ms 4432 KB Output is correct
15 Correct 1 ms 2384 KB Output is correct
16 Correct 1 ms 2384 KB Output is correct
17 Correct 1 ms 2384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 683 ms 92840 KB Output is correct
2 Correct 671 ms 92860 KB Output is correct
3 Correct 653 ms 92860 KB Output is correct
4 Correct 665 ms 92860 KB Output is correct
5 Correct 333 ms 52156 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 508 KB Output is correct
10 Correct 1 ms 336 KB Output is correct
11 Correct 1 ms 4432 KB Output is correct
12 Correct 2 ms 4432 KB Output is correct
13 Correct 2 ms 4432 KB Output is correct
14 Correct 2 ms 4432 KB Output is correct
15 Correct 1 ms 2384 KB Output is correct
16 Correct 1 ms 2384 KB Output is correct
17 Correct 1 ms 2384 KB Output is correct
18 Correct 184 ms 108484 KB Output is correct
19 Correct 188 ms 108484 KB Output is correct
20 Correct 175 ms 108484 KB Output is correct
21 Correct 188 ms 108632 KB Output is correct
22 Correct 178 ms 108484 KB Output is correct
23 Correct 87 ms 48828 KB Output is correct
24 Correct 80 ms 49020 KB Output is correct
25 Correct 79 ms 48828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 45 ms 11964 KB Output is correct
2 Correct 86 ms 12952 KB Output is correct
3 Correct 93 ms 18000 KB Output is correct
4 Correct 88 ms 18108 KB Output is correct
5 Correct 91 ms 18364 KB Output is correct
6 Correct 91 ms 18876 KB Output is correct
7 Correct 101 ms 18876 KB Output is correct
8 Correct 92 ms 18688 KB Output is correct
9 Correct 85 ms 16364 KB Output is correct
10 Correct 76 ms 16316 KB Output is correct
11 Correct 75 ms 16360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 669 ms 92860 KB Output is correct
2 Correct 682 ms 92912 KB Output is correct
3 Correct 675 ms 92860 KB Output is correct
4 Correct 718 ms 92860 KB Output is correct
5 Correct 705 ms 92872 KB Output is correct
6 Correct 342 ms 52160 KB Output is correct
7 Correct 208 ms 34760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 683 ms 92840 KB Output is correct
2 Correct 671 ms 92860 KB Output is correct
3 Correct 653 ms 92860 KB Output is correct
4 Correct 665 ms 92860 KB Output is correct
5 Correct 333 ms 52156 KB Output is correct
6 Correct 669 ms 92860 KB Output is correct
7 Correct 682 ms 92912 KB Output is correct
8 Correct 675 ms 92860 KB Output is correct
9 Correct 718 ms 92860 KB Output is correct
10 Correct 705 ms 92872 KB Output is correct
11 Correct 342 ms 52160 KB Output is correct
12 Correct 208 ms 34760 KB Output is correct
13 Correct 686 ms 92816 KB Output is correct
14 Correct 684 ms 92860 KB Output is correct
15 Correct 703 ms 92856 KB Output is correct
16 Correct 690 ms 92884 KB Output is correct
17 Correct 705 ms 92888 KB Output is correct
18 Correct 703 ms 92856 KB Output is correct
19 Correct 287 ms 42980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 1 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 1 ms 336 KB Output is correct
9 Correct 1 ms 336 KB Output is correct
10 Correct 1 ms 508 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 1 ms 4432 KB Output is correct
13 Correct 2 ms 4432 KB Output is correct
14 Correct 2 ms 4432 KB Output is correct
15 Correct 2 ms 4432 KB Output is correct
16 Correct 1 ms 2384 KB Output is correct
17 Correct 1 ms 2384 KB Output is correct
18 Correct 1 ms 2384 KB Output is correct
19 Correct 683 ms 92840 KB Output is correct
20 Correct 671 ms 92860 KB Output is correct
21 Correct 653 ms 92860 KB Output is correct
22 Correct 665 ms 92860 KB Output is correct
23 Correct 333 ms 52156 KB Output is correct
24 Correct 184 ms 108484 KB Output is correct
25 Correct 188 ms 108484 KB Output is correct
26 Correct 175 ms 108484 KB Output is correct
27 Correct 188 ms 108632 KB Output is correct
28 Correct 178 ms 108484 KB Output is correct
29 Correct 87 ms 48828 KB Output is correct
30 Correct 80 ms 49020 KB Output is correct
31 Correct 79 ms 48828 KB Output is correct
32 Correct 45 ms 11964 KB Output is correct
33 Correct 86 ms 12952 KB Output is correct
34 Correct 93 ms 18000 KB Output is correct
35 Correct 88 ms 18108 KB Output is correct
36 Correct 91 ms 18364 KB Output is correct
37 Correct 91 ms 18876 KB Output is correct
38 Correct 101 ms 18876 KB Output is correct
39 Correct 92 ms 18688 KB Output is correct
40 Correct 85 ms 16364 KB Output is correct
41 Correct 76 ms 16316 KB Output is correct
42 Correct 75 ms 16360 KB Output is correct
43 Correct 669 ms 92860 KB Output is correct
44 Correct 682 ms 92912 KB Output is correct
45 Correct 675 ms 92860 KB Output is correct
46 Correct 718 ms 92860 KB Output is correct
47 Correct 705 ms 92872 KB Output is correct
48 Correct 342 ms 52160 KB Output is correct
49 Correct 208 ms 34760 KB Output is correct
50 Correct 686 ms 92816 KB Output is correct
51 Correct 684 ms 92860 KB Output is correct
52 Correct 703 ms 92856 KB Output is correct
53 Correct 690 ms 92884 KB Output is correct
54 Correct 705 ms 92888 KB Output is correct
55 Correct 703 ms 92856 KB Output is correct
56 Correct 287 ms 42980 KB Output is correct
57 Incorrect 685 ms 98492 KB Output isn't correct
58 Halted 0 ms 0 KB -