QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#138536#5251. ConstellationsviniciuslettieriWA 6978ms159876kbC++142.8kb2023-08-11 22:06:222023-08-11 22:06:24

Judging History

你现在查看的是最新测评结果

  • [2023-08-11 22:06:24]
  • 评测
  • 测评结果:WA
  • 用时:6978ms
  • 内存:159876kb
  • [2023-08-11 22:06:22]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
using lint = int64_t;

struct constellation{
    double res;
    lint num, den;
    int i, j;
    bool operator<(const constellation& o)const {
        __int128 l = __int128(1) * num * o.den, r = __int128(1) * den * o.num;
        if(l == r) return make_pair(i, j) < make_pair(o.i, o.j);
        return l < r;
    }
};

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n;
    cin>>n;
    vector<int>x(n), y(n);
    for(int i=0;i<n;i++) cin>>x[i]>>y[i];
    vector<int>p(2*n-1), sz(2*n-1);
    for(int i=0;i<n;i++) p[i] = i, sz[i] = 1;
    vector<lint>s2x(n), s2y(n), sx(n), sy(n);
    set<constellation>s;
    for(int i=0;i<n;i++){
        s2x[i] = x[i] * x[i];
        s2y[i] = y[i] * y[i];
        sx[i] = x[i];
        sy[i] = y[i];
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            lint num = s2x[i] + s2x[j] + s2y[i] + s2y[j] - 2 * sx[i] * sx[j] - 2 * sy[i] * sy[j];
            lint den = 2;
            s.insert({num/double(den), num, den, i, j});
        }
    }

    auto find = [&](auto& self, int u)->int {
        if(p[u] == u) return u;
        return p[u] = self(self, p[u]);
    };

    auto join = [&](int u, int v)->int {
        u = find(find, u);
        v = find(find, v);
        if(sz[u] < sz[v]) swap(u, v);
        p[v] = u;
        sz[u] += sz[v];

        s2x[u] += s2x[v];
        s2y[u] += s2y[v];
        sx[u] += sx[v];
        sy[u] += sy[v];
        return u;
    };

    vector<bool>w(2*n-1);

    for(int z=0;z<n-1;z++){
        auto cur = *s.begin();
        int i = find(find, cur.i), j = find(find, cur.j);
        for(int k=0;k<n+z;k++){
            if(w[k]) continue;
            int l = find(find, k);
            {
                lint num = sz[l] * (s2x[i] + s2y[i]) + sz[i] * (s2x[l] + s2y[l]) - 2 * sx[i] * sx[l] - 2 * sy[i] * sy[l];
                lint den = sz[i] + sz[l];
                s.erase({num/double(den), num, den, min(cur.i, k), max(cur.i, k)});
            }
            {
                lint num = sz[l] * (s2x[j] + s2y[j]) + sz[j] * (s2x[l] + s2y[l]) - 2 * sx[j] * sx[l] - 2 * sy[j] * sy[l];
                lint den = sz[j] + sz[l];
                s.erase({num/double(den), num, den, min(cur.j, k), max(cur.j, k)});
            }
        }
        w[cur.i] = w[cur.j] = 1;
        int c = join(i, j);
        for(int k=0;k<n+z;k++){
            if(w[k]) continue;
            int l = find(find, k);
            lint num = sz[l] * (s2x[c] + s2y[c]) + sz[c] * (s2x[l] + s2y[l]) - 2 * sx[c] * sx[l] - 2 * sy[c] * sy[l];
            lint den = sz[c] + sz[l];
            s.insert({num/double(den), num, den, k, n + z});
        }
        p[n + z] = c;
        cout<<sz[c]<<"\n";
    }

    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3480kb

input:

2
0 0
1 0

output:

2

result:

ok single line: '2'

Test #2:

score: 0
Accepted
time: 3317ms
memory: 159812kb

input:

2000
1000 -1000
1000 -999
1000 -998
1000 -997
1000 -996
1000 -995
1000 -994
1000 -993
1000 -992
1000 -991
1000 -990
1000 -989
1000 -988
1000 -987
1000 -986
1000 -985
1000 -984
1000 -983
1000 -982
1000 -981
1000 -980
1000 -979
1000 -978
1000 -977
1000 -976
1000 -975
1000 -974
1000 -973
1000 -972
1000...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #3:

score: 0
Accepted
time: 3233ms
memory: 159808kb

input:

2000
-1000 1000
-999 1000
-998 1000
-997 1000
-996 1000
-995 1000
-994 1000
-993 1000
-992 1000
-991 1000
-990 1000
-989 1000
-988 1000
-987 1000
-986 1000
-985 1000
-984 1000
-983 1000
-982 1000
-981 1000
-980 1000
-979 1000
-978 1000
-977 1000
-976 1000
-975 1000
-974 1000
-973 1000
-972 1000
-971...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #4:

score: 0
Accepted
time: 3142ms
memory: 159772kb

input:

2000
-1000 -1000
-999 -1000
-998 -1000
-997 -1000
-996 -1000
-995 -1000
-994 -1000
-993 -1000
-992 -1000
-991 -1000
-990 -1000
-989 -1000
-988 -1000
-987 -1000
-986 -1000
-985 -1000
-984 -1000
-983 -1000
-982 -1000
-981 -1000
-980 -1000
-979 -1000
-978 -1000
-977 -1000
-976 -1000
-975 -1000
-974 -10...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #5:

score: 0
Accepted
time: 3189ms
memory: 159796kb

input:

2000
-1000 -1000
-1000 -999
-1000 -998
-1000 -997
-1000 -996
-1000 -995
-1000 -994
-1000 -993
-1000 -992
-1000 -991
-1000 -990
-1000 -989
-1000 -988
-1000 -987
-1000 -986
-1000 -985
-1000 -984
-1000 -983
-1000 -982
-1000 -981
-1000 -980
-1000 -979
-1000 -978
-1000 -977
-1000 -976
-1000 -975
-1000 -9...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #6:

score: 0
Accepted
time: 4291ms
memory: 159788kb

input:

2000
1000 -250
1000 -249
1000 -248
1000 -247
1000 -246
1000 -245
1000 -244
1000 -243
1000 -242
1000 -241
1000 -240
1000 -239
1000 -238
1000 -237
1000 -236
1000 -235
1000 -234
1000 -233
1000 -232
1000 -231
1000 -230
1000 -229
1000 -228
1000 -227
1000 -226
1000 -225
1000 -224
1000 -223
1000 -222
1000 ...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #7:

score: 0
Accepted
time: 3209ms
memory: 159748kb

input:

2000
0 -1000
0 -999
0 -998
0 -997
0 -996
0 -995
0 -994
0 -993
0 -992
0 -991
0 -990
0 -989
0 -988
0 -987
0 -986
0 -985
0 -984
0 -983
0 -982
0 -981
0 -980
0 -979
0 -978
0 -977
0 -976
0 -975
0 -974
0 -973
0 -972
0 -971
0 -970
0 -969
0 -968
0 -967
0 -966
0 -965
0 -964
0 -963
0 -962
0 -961
0 -960
0 -959
...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 1999 lines

Test #8:

score: -100
Wrong Answer
time: 6978ms
memory: 159876kb

input:

2000
-400 571
-725 636
-880 529
-657 372
-383 382
-746 888
-604 785
-497 557
-677 977
-562 917
-530 623
-636 535
-816 579
-633 428
-573 561
-496 479
-409 448
-570 379
-421 795
-827 865
-730 809
-423 984
-676 772
-398 816
-451 373
-756 777
-351 829
-954 345
-543 871
-595 521
-501 734
-378 769
-987 60...

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
2
2
2
2
2
2
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
2
2
2
...

result:

wrong answer 43rd lines differ - expected: '3', found: '2'