답안 #1108988

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1108988 2024-11-05T18:30:59 Z Kerim 모자이크 (IOI24_mosaic) C++17
70 / 100
753 ms 108492 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;
            ll rec = (xx-x+1)*1LL*(yy-y+1);
            if (rec % 2 == 0)
                ans.push_back(rec/2);
            else{
                if ((x+y)%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 348 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 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 348 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 336 KB Output is correct
11 Correct 2 ms 4432 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 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 717 ms 92860 KB Output is correct
2 Correct 675 ms 92860 KB Output is correct
3 Correct 680 ms 92860 KB Output is correct
4 Correct 671 ms 92876 KB Output is correct
5 Correct 347 ms 52008 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 348 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 336 KB Output is correct
11 Correct 2 ms 4432 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 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 108444 KB Output is correct
19 Correct 169 ms 108476 KB Output is correct
20 Correct 177 ms 108484 KB Output is correct
21 Correct 192 ms 108448 KB Output is correct
22 Correct 181 ms 108492 KB Output is correct
23 Correct 82 ms 48828 KB Output is correct
24 Correct 85 ms 48828 KB Output is correct
25 Correct 80 ms 48828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 11964 KB Output is correct
2 Incorrect 91 ms 12988 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 691 ms 93140 KB Output is correct
2 Correct 696 ms 92860 KB Output is correct
3 Correct 665 ms 92864 KB Output is correct
4 Correct 656 ms 92848 KB Output is correct
5 Correct 655 ms 92860 KB Output is correct
6 Correct 343 ms 52156 KB Output is correct
7 Correct 195 ms 34752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 717 ms 92860 KB Output is correct
2 Correct 675 ms 92860 KB Output is correct
3 Correct 680 ms 92860 KB Output is correct
4 Correct 671 ms 92876 KB Output is correct
5 Correct 347 ms 52008 KB Output is correct
6 Correct 691 ms 93140 KB Output is correct
7 Correct 696 ms 92860 KB Output is correct
8 Correct 665 ms 92864 KB Output is correct
9 Correct 656 ms 92848 KB Output is correct
10 Correct 655 ms 92860 KB Output is correct
11 Correct 343 ms 52156 KB Output is correct
12 Correct 195 ms 34752 KB Output is correct
13 Correct 716 ms 92748 KB Output is correct
14 Correct 702 ms 92860 KB Output is correct
15 Correct 676 ms 92860 KB Output is correct
16 Correct 704 ms 92816 KB Output is correct
17 Correct 753 ms 92820 KB Output is correct
18 Correct 722 ms 92840 KB Output is correct
19 Correct 303 ms 43052 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 348 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 336 KB Output is correct
11 Correct 1 ms 336 KB Output is correct
12 Correct 2 ms 4432 KB Output is correct
13 Correct 1 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 717 ms 92860 KB Output is correct
20 Correct 675 ms 92860 KB Output is correct
21 Correct 680 ms 92860 KB Output is correct
22 Correct 671 ms 92876 KB Output is correct
23 Correct 347 ms 52008 KB Output is correct
24 Correct 184 ms 108444 KB Output is correct
25 Correct 169 ms 108476 KB Output is correct
26 Correct 177 ms 108484 KB Output is correct
27 Correct 192 ms 108448 KB Output is correct
28 Correct 181 ms 108492 KB Output is correct
29 Correct 82 ms 48828 KB Output is correct
30 Correct 85 ms 48828 KB Output is correct
31 Correct 80 ms 48828 KB Output is correct
32 Correct 51 ms 11964 KB Output is correct
33 Incorrect 91 ms 12988 KB Output isn't correct
34 Halted 0 ms 0 KB -