提出 #57561766


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
#define f(n, i, x) for (int i = x; i < n; i++)
#define vb push_back
#define ll long long
class DSU
{
public:
    vector<vector<int>> parent;

    DSU(int n)
    {
        parent.resize(n, vector<int>(4));
        for (int i = 0; i < n; ++i)
        {
            parent[i][0] = i;
            parent[i][1] = i;
            parent[i][2] = i;
            parent[i][3] = i;
        }
    }

    int find(int x, int y)
    {

        if (parent[x][y] == x)
            return x;
        return parent[x][y]=find(parent[x][y], y);
    }
};

bool isp(int l1,int r1, int n, int m)
{
    return l1>=0&&l1<n&&r1>=0&&r1<m;
}
void update(DSU &dsu, int l1, int r1, int n, int m)
{
    if (isp(l1,r1+1, n, m))
    {
        dsu.parent[l1 * m + r1][0] = dsu.find(l1 * m + r1 + 1, 0);
        // cout<<dsu.parent[l1*m+r1][0]/m<<' '<<dsu.parent[l1*m+r1][0]%m<<endl;
    }
    if (isp(l1 ,  r1 - 1, n, m))
    {
        dsu.parent[l1 * m + r1][1] = dsu.find(l1 * m + r1 - 1, 1);
        // cout<<dsu.parent[l1*m+r1][1]/m<<' '<<dsu.parent[l1*m+r1][1]%m<<endl;
    }
    if (isp(l1-1,r1, n, m))
    {
        dsu.parent[l1 * m + r1][2] = dsu.find((l1 - 1) * m + r1, 2);
        // cout<<dsu.parent[l1*m+r1][2]/m<<' '<<dsu.parent[l1*m+r1][2]%m<<endl;
    }
    if (isp(l1 + 1 , r1, n, m))
    {
        dsu.parent[l1 * m + r1][3] = dsu.find((l1 + 1) * m + r1, 3);
        // cout<<dsu.parent[l1*m+r1][3]/m<<' '<<dsu.parent[l1*m+r1][3]%m<<endl;
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m, q;
    cin >> n >> m >> q;
    DSU dsu(n * m + 1);
    vector<int> vis(n * m + 1, 0);
    int ans = 0;
    f(q, i, 0)
    {
        int l1, r1;
        cin >> l1 >> r1;
        l1--, r1--;
        if (!vis[l1 * m + r1])
        {
            vis[l1 * m + r1] = 1;
            ans++;
            // cout << l1 << ' ' << r1 << endl;
            update(dsu, l1, r1, n, m);
            
        }
        else
        {
            int pr = dsu.parent[l1 * m + r1][0];
            if (isp(pr/m,pr%m, n, m) && !vis[pr])
            {
                ans++;
                // cout << pr / m << ' ' << pr % m << endl;
                vis[pr] = 1;
                update(dsu, pr / m, pr % m, n, m);
            }
            pr = dsu.parent[l1 * m + r1][1];

            if (isp(pr/m,pr%m, n, m) && !vis[pr])
            {

                ans++;
                // cout << pr / m << ' ' << pr % m << endl;
                vis[pr] = 1;
                update(dsu, pr / m, pr % m, n, m);
            }
            pr = dsu.parent[l1 * m + r1][2];
            if (isp(pr/m,pr%m, n, m) && !vis[pr])
            {
                ans++;
                // cout << pr / m << ' ' << pr % m << endl;
                vis[pr] = 1;
                update(dsu, pr / m, pr % m, n, m);
            }
            pr = dsu.parent[l1 * m + r1][3];
            if (isp(pr/m,pr%m, n, m) && !vis[pr])
            {
                ans++;
                // cout << pr / m << ' ' << pr % m << endl;
                vis[pr] = 1;
                update(dsu, pr / m, pr % m, n, m);
            }
            update(dsu, l1, r1, n, m);
            
        }
        // cout<<endl;
    }
    cout << n * m - ans << endl;
}

提出情報

提出日時
問題 D - Cross Explosion
ユーザ CodeShark
言語 C++ 20 (gcc 12.2)
得点 0
コード長 3375 Byte
結果 WA
実行時間 111 ms
メモリ 26672 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 400
結果
AC × 3
AC × 11
WA × 15
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 02_all_break_00.txt, 03_hack_00.txt, 03_hack_01.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3484 KiB
00_sample_01.txt AC 1 ms 3364 KiB
00_sample_02.txt AC 1 ms 3508 KiB
01_random_00.txt WA 79 ms 23404 KiB
01_random_01.txt WA 50 ms 23940 KiB
01_random_02.txt WA 62 ms 26672 KiB
01_random_03.txt WA 97 ms 26500 KiB
01_random_04.txt WA 94 ms 25992 KiB
01_random_05.txt WA 103 ms 26672 KiB
01_random_06.txt WA 97 ms 26672 KiB
01_random_07.txt WA 63 ms 26600 KiB
01_random_08.txt WA 48 ms 20084 KiB
01_random_09.txt AC 107 ms 26244 KiB
01_random_10.txt WA 54 ms 26444 KiB
01_random_11.txt WA 72 ms 26556 KiB
01_random_12.txt AC 81 ms 24144 KiB
01_random_13.txt AC 111 ms 26544 KiB
01_random_14.txt WA 63 ms 26504 KiB
01_random_15.txt AC 106 ms 26512 KiB
01_random_16.txt WA 79 ms 26280 KiB
01_random_17.txt WA 78 ms 26488 KiB
01_random_18.txt AC 109 ms 26528 KiB
01_random_19.txt WA 62 ms 26532 KiB
02_all_break_00.txt AC 46 ms 26604 KiB
03_hack_00.txt AC 34 ms 26528 KiB
03_hack_01.txt AC 34 ms 26516 KiB