203212026-01-06 13:51:06hunzombiBináris Sakkcpp17Wrong answer 0/1001.526s11488 KiB
#include <bits/stdc++.h>
using namespace std;

const long long MOD = 1e9 + 7;

int r, c, n;
vector<vector<int>> nodes;

bool sort1(vector<int> a, vector<int> b) {
    return (a[0] <= b[0]);
}

bool sort2(vector<int> a, vector<int> b) {
    return (a[1] <= b[1]);
}

bool sort3(vector<int> a, vector<int> b) {
    return (abs(a[1] - a[0]) <= abs(b[1] - b[0]));
}

bool sort4(vector<int> a, vector<int> b) {
    return (a[0] + a[1] <= b[0] + b[1]);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> r >> c >> n;

    vector<bool> group(n, false);

    for (int i=0; i < n; i++) {
        int u, v;
        cin >> u >> v;
        nodes.push_back({u, v, i});
    }

    int ans = 0;

    sort(nodes.begin(), nodes.end(), sort1);
    for (int i=1; i < n; i++) {
        vector<int> prev = nodes[i - 1];
        vector<int> cur = nodes[i];
        if (prev[0] == cur[0]) {
            if (!group[prev[2]] && !group[cur[2]]) {
                ans++;
            }
            group[prev[2]] = true;
            group[cur[2]] = true;
        }
    }
    sort(nodes.begin(), nodes.end(), sort2);
    for (int i=1; i < n; i++) {
        vector<int> prev = nodes[i - 1];
        vector<int> cur = nodes[i];
        if (prev[1] == cur[1]) {
            if (!group[prev[2]] && !group[cur[2]]) {
                ans++;
            }
            group[prev[2]] = true;
            group[cur[2]] = true;
        }
    }
    sort(nodes.begin(), nodes.end(), sort3);
    for (int i=1; i < n; i++) {
        vector<int> prev = nodes[i - 1];
        vector<int> cur = nodes[i];
        if (abs(prev[1] - prev[0]) == abs(cur[1] - cur[0])) {
            if (!group[prev[2]] && !group[cur[2]]) {
                ans++;
            }
            group[prev[2]] = true;
            group[cur[2]] = true;
        }
    }
    sort(nodes.begin(), nodes.end(), sort4);
    for (int i=1; i < n; i++) {
        vector<int> prev = nodes[i - 1];
        vector<int> cur = nodes[i];
        if (prev[1] + prev[0] == cur[1] - cur[0]) {
            if (!group[prev[2]] && !group[cur[2]]) {
                ans++;
            }
            group[prev[2]] = true;
            group[cur[2]] = true;
        }
    }

    for (int i=0; i < n; i++) {
        if (!group[i]) {
            ans++;
        }
        group[i] = true;
    }

    int res = 1;

    while (ans--) {
        res = (res * 2) % MOD;
    }

    cout << res << '\n';

    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted1ms316 KiB
subtask20/11
3Accepted1ms544 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms332 KiB
7Accepted1ms316 KiB
8Wrong answer3ms452 KiB
9Wrong answer3ms316 KiB
10Runtime error1ms316 KiB
11Wrong answer4ms476 KiB
12Wrong answer4ms316 KiB
13Wrong answer4ms480 KiB
14Runtime error1ms316 KiB
15Runtime error2ms316 KiB
16Runtime error3ms316 KiB
17Runtime error4ms508 KiB
18Wrong answer1ms316 KiB
subtask30/19
19Runtime error35ms5604 KiB
20Runtime error9ms1840 KiB
21Runtime error8ms1612 KiB
22Runtime error76ms10964 KiB
23Runtime error14ms2796 KiB
24Runtime error18ms1076 KiB
25Runtime error82ms11472 KiB
26Runtime error83ms11476 KiB
27Runtime error90ms11476 KiB
28Runtime error101ms11476 KiB
29Runtime error81ms11304 KiB
30Runtime error105ms11476 KiB
31Runtime error72ms11480 KiB
32Runtime error81ms11476 KiB
subtask40/19
33Accepted4ms512 KiB
34Accepted4ms448 KiB
35Accepted2ms508 KiB
36Accepted2ms316 KiB
37Accepted2ms316 KiB
38Accepted2ms500 KiB
39Accepted4ms508 KiB
40Accepted4ms324 KiB
41Accepted4ms316 KiB
42Accepted4ms500 KiB
43Runtime error1ms508 KiB
44Runtime error2ms316 KiB
45Runtime error3ms316 KiB
46Runtime error3ms316 KiB
47Accepted4ms316 KiB
subtask50/51
48Wrong answer81ms1328 KiB
49Wrong answer230ms2748 KiB
50Wrong answer907ms10720 KiB
51Wrong answer1.182s10720 KiB
52Wrong answer389ms3928 KiB
53Wrong answer569ms5348 KiB
54Wrong answer219ms2796 KiB
55Accepted71ms1136 KiB
56Wrong answer218ms2796 KiB
57Wrong answer1.389s11032 KiB
58Wrong answer1.526s11224 KiB
59Wrong answer1.43s11220 KiB
60Wrong answer1.513s11220 KiB
61Wrong answer1.447s11220 KiB
62Wrong answer1.518s11220 KiB
63Runtime error79ms11464 KiB
64Runtime error382ms11488 KiB
65Runtime error689ms11416 KiB
66Runtime error832ms11416 KiB
67Wrong answer1.402s11220 KiB
68Wrong answer1.442s11220 KiB