답안 #541971

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
541971 2022-03-24T22:38:09 Z Olympia Topovi (COCI15_topovi) C++17
6 / 120
2000 ms 45476 KB
#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <cmath>
#include <map>
#include <random>
#include <cassert>
#include <ctime>
#include <cstdlib>
#include <limits.h>
#include <queue>

using namespace std;
const int MOD = 10007;
class DynamicThing {
    map<int,int> oc1;
    map<int,int> oc2;
public:
    int tot = 0;
    void remove (int type, int index, int quantity) {
        if (type == 1) {
            tot -= oc1[index] * oc2[index];
            oc1[index] -= quantity;
            tot += oc1[index] * oc2[index];
        } else {
            tot -= oc1[index] * oc2[index];
            oc2[index] -= quantity;
            tot += oc1[index] * oc2[index];
        }
    }
    void add (int type, int index, int quantity) {
        if (type == 1) {
            tot -= oc1[index] * oc2[index];
            oc1[index] += quantity;
            tot += oc1[index] * oc2[index];
        } else {
            tot -= oc1[index] * oc2[index];
            oc2[index] += quantity;
            tot += oc1[index] * oc2[index];
        }
    }
};
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    map<int,int> row_xor;
    map<int,int> col_xor;
    int N, K, P;
    cin >> N >> K >> P;
    DynamicThing dt;
    dt.add(1, 0, N);
    dt.add(2, 0, N);
    map<pair<int,int>,int> loc;
    for (int i = 0; i < N; i++) {
        int r, c, x;
        cin >> r >> c >> x;
        dt.remove(1, row_xor[r], 1 );
        dt.remove(2, col_xor[c], 1);
        row_xor[r] ^= x;
        col_xor[c] ^= x;
        dt.add(1, row_xor[r], 1 );
        dt.add(2, col_xor[c], 1);
        loc[{r, c}] = x;
    }
    while (P--) {
        int r1, c1, r2, c2;
        cin >> r1 >> c1 >> r2 >> c2;
        if (r1 != r2) {
            dt.remove(1, row_xor[r1], 1);
            dt.remove(1, row_xor[r2], 1);
            row_xor[r1] ^= loc[{r1, c1}];
            row_xor[r2] ^= loc[{r1, c1}];
        }
        if (c1 != c2) {
            dt.remove(2, col_xor[c1], 1);
            dt.remove(2, col_xor[c2], 1);
            col_xor[c1] ^= loc[{r1, c1}];
            col_xor[c2] ^= loc[{r1, c1}];
        }
        loc[{r2, c2}] = loc[{r1, c1}];
        loc[{r1, c1}] = 0;
        if (r1 != r2) {
            dt.add(1, row_xor[r1], 1);
            dt.add(1, row_xor[r2], 1 );
        }
        if (c1 != c2) {
            dt.add(2, col_xor[c1], 1);
            dt.add(2, col_xor[c2], 1);
        }
        cout << N * N - dt.tot << '\n';
    }
    //cout << dt.tot << '\n';

}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Correct 1 ms 212 KB Output is correct
3 Incorrect 1 ms 212 KB Output isn't correct
4 Incorrect 1 ms 212 KB Output isn't correct
5 Incorrect 1 ms 212 KB Output isn't correct
6 Incorrect 938 ms 7944 KB Output isn't correct
7 Incorrect 528 ms 6484 KB Output isn't correct
8 Incorrect 770 ms 5304 KB Output isn't correct
9 Incorrect 788 ms 5300 KB Output isn't correct
10 Incorrect 822 ms 6040 KB Output isn't correct
11 Execution timed out 2090 ms 45348 KB Time limit exceeded
12 Execution timed out 2068 ms 45448 KB Time limit exceeded
13 Execution timed out 2078 ms 45448 KB Time limit exceeded
14 Execution timed out 2085 ms 45436 KB Time limit exceeded
15 Execution timed out 2081 ms 45388 KB Time limit exceeded
16 Execution timed out 2082 ms 45392 KB Time limit exceeded
17 Execution timed out 2055 ms 45476 KB Time limit exceeded
18 Execution timed out 2092 ms 45328 KB Time limit exceeded
19 Execution timed out 2098 ms 45472 KB Time limit exceeded
20 Execution timed out 2076 ms 45292 KB Time limit exceeded