203212026-01-06 13:51:06hunzombiBináris Sakkcpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask20/11
3Elfogadva1ms544 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms332 KiB
7Elfogadva1ms316 KiB
8Hibás válasz3ms452 KiB
9Hibás válasz3ms316 KiB
10Futási hiba1ms316 KiB
11Hibás válasz4ms476 KiB
12Hibás válasz4ms316 KiB
13Hibás válasz4ms480 KiB
14Futási hiba1ms316 KiB
15Futási hiba2ms316 KiB
16Futási hiba3ms316 KiB
17Futási hiba4ms508 KiB
18Hibás válasz1ms316 KiB
subtask30/19
19Futási hiba35ms5604 KiB
20Futási hiba9ms1840 KiB
21Futási hiba8ms1612 KiB
22Futási hiba76ms10964 KiB
23Futási hiba14ms2796 KiB
24Futási hiba18ms1076 KiB
25Futási hiba82ms11472 KiB
26Futási hiba83ms11476 KiB
27Futási hiba90ms11476 KiB
28Futási hiba101ms11476 KiB
29Futási hiba81ms11304 KiB
30Futási hiba105ms11476 KiB
31Futási hiba72ms11480 KiB
32Futási hiba81ms11476 KiB
subtask40/19
33Elfogadva4ms512 KiB
34Elfogadva4ms448 KiB
35Elfogadva2ms508 KiB
36Elfogadva2ms316 KiB
37Elfogadva2ms316 KiB
38Elfogadva2ms500 KiB
39Elfogadva4ms508 KiB
40Elfogadva4ms324 KiB
41Elfogadva4ms316 KiB
42Elfogadva4ms500 KiB
43Futási hiba1ms508 KiB
44Futási hiba2ms316 KiB
45Futási hiba3ms316 KiB
46Futási hiba3ms316 KiB
47Elfogadva4ms316 KiB
subtask50/51
48Hibás válasz81ms1328 KiB
49Hibás válasz230ms2748 KiB
50Hibás válasz907ms10720 KiB
51Hibás válasz1.182s10720 KiB
52Hibás válasz389ms3928 KiB
53Hibás válasz569ms5348 KiB
54Hibás válasz219ms2796 KiB
55Elfogadva71ms1136 KiB
56Hibás válasz218ms2796 KiB
57Hibás válasz1.389s11032 KiB
58Hibás válasz1.526s11224 KiB
59Hibás válasz1.43s11220 KiB
60Hibás válasz1.513s11220 KiB
61Hibás válasz1.447s11220 KiB
62Hibás válasz1.518s11220 KiB
63Futási hiba79ms11464 KiB
64Futási hiba382ms11488 KiB
65Futási hiba689ms11416 KiB
66Futási hiba832ms11416 KiB
67Hibás válasz1.402s11220 KiB
68Hibás válasz1.442s11220 KiB