提出 #47295915


ソースコード 拡げる

// LUOGU_RID: 133475449
#include <bits/stdc++.h>
#define pii pair<int, int>
#define X first 
#define Y second
using namespace std;
typedef long long i64;

int n, a, b, dis, x[100005], y[100005];
pii A[100005], B[100005];
int fa[100005], cnt[100005], c[100005], id[100005]; 

int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
void solve(int type) {
    for (int i = 1; i <= n; ++i) id[i] = i; 
    sort(id + 1, id + n + 1, [&](int x, int y) { return A[x] < A[y]; }); 
    for (int i = 1; i <= n; ++i) B[i] = A[id[i]]; 
    memset(c, 0, sizeof c); 
    for (int i = 1; i <= n; ++i) {
        int l = lower_bound(B + 1, B + n + 1, make_pair(B[i].X + dis, B[i].Y - dis + type)) - B; 
        int r = upper_bound(B + 1, B + n + 1, make_pair(B[i].X + dis, B[i].Y + dis - type)) - B - 1; 
        if (l <= r) {
            ++c[l], --c[r]; 
            fa[find(id[i])] = find(id[l]); 
            cnt[id[i]] += r - l + 1; 
        }
    }
    for (int i = 1; i < n; ++i) if (c[i] += c[i - 1]) fa[find(id[i])] = find(id[i + 1]); 
}

int main(void) {
    ios::sync_with_stdio(0); 
    cin >> n >> a >> b; 
    for (int i = 1; i <= n; ++i) cin >> x[i] >> y[i], A[i].X = x[i] + y[i], A[i].Y = x[i] - y[i]; 
    dis = abs(x[a] - x[b]) + abs(y[a] - y[b]); 

    for (int i = 1; i <= n; ++i) fa[i] = i; solve(0); 
    for (int i = 1; i <= n; ++i) swap(A[i].X, A[i].Y); solve(1); 

    i64 ans = 0; 
    for (int i = 1; i <= n; ++i) if (find(i) == find(a)) ans += cnt[i];
    cout << ans << "\n"; 
    return 0;
}

提出情報

提出日時
問題 E - へんなコンパス
ユーザ james1BadCreeper
言語 C++ 17 (gcc 12.2)
得点 900
コード長 1554 Byte
結果 AC
実行時間 51 ms
メモリ 7780 KiB

コンパイルエラー

Main.cpp: In function ‘int main()’:
Main.cpp:37:5: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
   37 |     for (int i = 1; i <= n; ++i) fa[i] = i; solve(0);
      |     ^~~
Main.cpp:37:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’
   37 |     for (int i = 1; i <= n; ++i) fa[i] = i; solve(0);
      |                                             ^~~~~
Main.cpp:38:5: warning: this ‘for’ clause does not guard... [-Wmisleading-indentation]
   38 |     for (int i = 1; i <= n; ++i) swap(A[i].X, A[i].Y); solve(1);
      |     ^~~
Main.cpp:38:56: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘for’
   38 |     for (int i = 1; i <= n; ++i) swap(A[i].X, A[i].Y); solve(1);
      |                                                        ^~~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 900 / 900
結果
AC × 3
AC × 28
セット名 テストケース
Sample subtask0_0.txt, subtask0_1.txt, subtask0_2.txt
All subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_2.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt
ケース名 結果 実行時間 メモリ
subtask0_0.txt AC 1 ms 4024 KiB
subtask0_1.txt AC 1 ms 3968 KiB
subtask0_2.txt AC 1 ms 4028 KiB
subtask1_0.txt AC 39 ms 7596 KiB
subtask1_1.txt AC 38 ms 7780 KiB
subtask1_10.txt AC 51 ms 7376 KiB
subtask1_11.txt AC 45 ms 7320 KiB
subtask1_12.txt AC 38 ms 7324 KiB
subtask1_13.txt AC 38 ms 7372 KiB
subtask1_14.txt AC 46 ms 7336 KiB
subtask1_15.txt AC 45 ms 7248 KiB
subtask1_16.txt AC 40 ms 7744 KiB
subtask1_17.txt AC 41 ms 7708 KiB
subtask1_18.txt AC 48 ms 7252 KiB
subtask1_19.txt AC 46 ms 7436 KiB
subtask1_2.txt AC 46 ms 7388 KiB
subtask1_20.txt AC 40 ms 7692 KiB
subtask1_21.txt AC 40 ms 7660 KiB
subtask1_22.txt AC 47 ms 7308 KiB
subtask1_23.txt AC 48 ms 7368 KiB
subtask1_24.txt AC 40 ms 7728 KiB
subtask1_3.txt AC 48 ms 7316 KiB
subtask1_4.txt AC 40 ms 7616 KiB
subtask1_5.txt AC 40 ms 7500 KiB
subtask1_6.txt AC 48 ms 7436 KiB
subtask1_7.txt AC 49 ms 7384 KiB
subtask1_8.txt AC 38 ms 7360 KiB
subtask1_9.txt AC 40 ms 7644 KiB