답안 #64975

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64975 2018-08-06T10:48:04 Z forestryks Topovi (COCI15_topovi) C++11
102 / 120
2000 ms 64268 KB
///////////////////////////////////////////////////////////////////////////////////////////////
#include <bits/stdc++.h>
using namespace std;

// #define int long long

#define FAST_IO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define FILE_IO(x) freopen((string(x) + ".in").c_str(), "r", stdin); freopen((string(x) + ".out").c_str(), "w", stdout)
#define f first
#define s second
#define x1 x1qwer
#define y1 y1qwer
#define right right123
#define left left123
#define foreach(it, v) for (auto it : v)
#define rep(it, n) for (int it = 0; it < n; ++it)
#define forin(it, l, r) for (int it = l; it < r; ++it)
#define all(x) x.begin(), x.end()

typedef long long ll;
typedef unsigned long long ull;
typedef double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const double DINF = numeric_limits<double>::infinity();
const ll MOD = 1e9 + 7;
const double EPS = 1e-7;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
mt19937 mmtw_(MOD);
uniform_int_distribution<ll> rd_;
ll randomll() { return rd_(mmtw_);}
ll rnd(ll x, ll y) { return rd_(mmtw_) % (y - x + 1) + x; }
template <class T> T fact(T n) { if (n == 1) return 1; return n * fact(n - 1); }
////////////////////////////////////////////////////////////////////////////////////////////////

int n, m, k;
ll res = 0;
map<int, int> rcnt, rval;
map<int, int> ccnt, cval;
map<pair<int, int>, int> rooks;

void add(int r, int c, int a) {
    res -= (n - ccnt[rval[r]]);
    res -= (n - rcnt[cval[c]]);
    if (rval[r] != cval[c]) res++;

    // cout << res << endl;

    rcnt[rval[r]]--;
    rval[r] ^= a;
    rcnt[rval[r]]++;

    ccnt[cval[c]]--;
    cval[c] ^= a;
    ccnt[cval[c]]++;

    res += (n - ccnt[rval[r]]);
    res += (n - rcnt[cval[c]]);
    if (rval[r] != cval[c]) res--;
}

int main() {
    FAST_IO;
    cin >> n >> m >> k;
    rcnt[0] = n; ccnt[0] = n;
    rep(i, m) {
        // cout << "--- " << i << " ---" << endl;
        int x, y, a;
        cin >> x >> y >> a;
        add(x - 1, y - 1, a);
        rooks[{x - 1, y - 1}] = a;
    }

    // cout << res << endl;

    rep(i, k) {
        // cout << "--- " << i << " ---" << '\n';
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        x1--; y1--; x2--; y2--;

        int val = rooks[{x1, y1}];
        add(x1, y1, val);
        add(x2, y2, val);
        rooks[{x1, y1}] = 0;
        rooks[{x2, y2}] = val;

        cout << res << '\n';
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 3 ms 440 KB Output is correct
3 Correct 3 ms 536 KB Output is correct
4 Correct 2 ms 536 KB Output is correct
5 Correct 3 ms 536 KB Output is correct
6 Correct 197 ms 6220 KB Output is correct
7 Correct 188 ms 6448 KB Output is correct
8 Correct 131 ms 6448 KB Output is correct
9 Correct 128 ms 6616 KB Output is correct
10 Correct 136 ms 7296 KB Output is correct
11 Correct 1867 ms 42660 KB Output is correct
12 Correct 1792 ms 48648 KB Output is correct
13 Correct 1745 ms 54732 KB Output is correct
14 Correct 1742 ms 60604 KB Output is correct
15 Correct 1872 ms 64268 KB Output is correct
16 Correct 1840 ms 64268 KB Output is correct
17 Correct 1906 ms 64268 KB Output is correct
18 Execution timed out 2097 ms 64268 KB Time limit exceeded
19 Execution timed out 2037 ms 64268 KB Time limit exceeded
20 Execution timed out 2032 ms 64268 KB Time limit exceeded