QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#279007#7906. Almost Convexucup-team1508#WA 485ms3732kbC++205.0kb2023-12-08 00:56:202023-12-08 00:56:20

Judging History

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

  • [2023-12-08 00:56:20]
  • 评测
  • 测评结果:WA
  • 用时:485ms
  • 内存:3732kb
  • [2023-12-08 00:56:20]
  • 提交

answer

#include<bits/stdc++.h>
#define F(i, a, b) for(int i = a; i <= b; i ++)
#define Fd(i, a, b) for(int i = a; i >= b; i --)
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
using namespace std;
typedef long long db;
const db eps = 0;
int sgn(db x) {
    if(fabs(x) <= eps) return 0;
    else return x < 0 ? -1 : 1;
}
struct point {
    db x, y;
    int id;
    point() {}
    point(db x, db y, int id) : x(x), y(y), id(id) {}
    point operator + (point B) {return point(x + B.x, y + B.y, id);}
    point operator - (point B) {return point(x - B.x, y - B.y, id);}
    bool operator == (point B) {return sgn(x - B.x) == 0 && sgn(y - B.y) == 0;}
    bool operator < (point B) {return sgn(x - B.x) < 0 || (sgn(x - B.x) == 0 && sgn(y - B.y) < 0);}
};
// bool cmp(point a, point b) {
//     return sgn(a.y - b.y) == 0 ? sgn(a.x - b.x) < 0 : sgn(a.y - b.y) <= 0; 
// }
db cross(point A, point B) {return A.x * B.y - A.y * B.x;}
bool get_region(point a) {
    return a.y <= 0 && (a.x < 0 || a.y < 0);
}
point o = {0, 0, 0};
// bool cmp1(point a, point b) { // 极角排序 逆时针
//     point p = a - o, q = b - o;
//     if(sgn(atan2(p.y, p.x) - atan2(q.y, q.x)) == 0) return p.x < p.y;
//     return atan2(p.y, p.x) < atan2(q.y, q.x);
// }
// bool cmp2(point a, point b) {
//     point p = a - o, q = b - o;
//     if(sgn(atan2(p.y, p.x) - atan2(q.y, q.x)) == 0) return p.x > p.y;
//     return atan2(p.y, p.x) > atan2(q.y, q.x);
// }
bool cmp1(point a, point b) {
    point p = a - o, q = b - o;
    int r1 = get_region(p), r2 = get_region(q);
    if(r1 != r2) return r1 < r2;
    if(cross(p, q) == 0) return p.x < q.x;
    return cross(p, q) > 0;
}
// bool cmp2(point a, point b) {
//     point p = a - o, q = b - o;
//     int r1 = get_region(a), r2 = get_region(b);
//     if(r1 != r2) return r1 > r2;
//     if(cross(p, q) == 0) return a.x < b.x;
//     return cross(p, q) < 0;
// }
const int N = 2005;

int convex_hull(vector<point> p, int n, int *ch) {
    int v = 0;
    F(i, 0, n - 1) {
        while(v >= 2 && sgn(cross(p[ch[v - 1]] - p[ch[v - 2]], p[i] - p[ch[v - 1]])) <= 0) v --;
        ch[v ++] = i;
    } int j = v;
    Fd(i, n - 2, 0) {
        while(v > j && sgn(cross(p[ch[v - 1]] - p[ch[v - 2]], p[i] - p[ch[v - 1]])) <= 0) v --;
        ch[v ++] = i;
    } 
    return n > 1 ? v - 1 : v;
}

int ch[N], vst[N];

void sol() {
    int n; cin >> n;
    vector<point> a(n);
    F(i, 0, n - 1) {
        int x, y; cin >> x >> y;
        a[i].x = x, a[i].y = y;
    }
    sort(a.begin(), a.end());
    int m = convex_hull(a, n, ch);
    F(i, 0, n - 1) a[i].id = i;
    // cout << m << endl;
    // F(i, 0, m - 1) cout << ch[i] << " \n" [i == m - 1];
    F(i, 0, m - 1) vst[ch[i]] = 1;
    int res = 0;
    F(i, 0, m - 1) {
        int l = ch[i], r = ch[(i + 1) % m];
        // cout << l << " " << r << "\n";
        auto b = a, c = a;
        vector<point> tmp(n);
        o = a[l];
        sort(b.begin(), b.end(), cmp1);
        o = a[r];
        sort(c.begin(), c.end(), cmp1);
        reverse(c.begin(), c.end());
        int b0, b1;
        F(j, 0, n - 1) {
            if(b[j].id == a[r].id) {
                b0 = (j + 1) % n;
                break;
            }
        }
        F(j, 0, n - 1) {
            if(c[j].id == a[l].id) {
                b1 = (j + 1) % n;
                break;
            }
        }
        // cout << b0 << " " << b1 << endl;
        // cout << 1 << endl;
        // cout << "szb: " << b.size() << "\n";
        vector<int> pos1(n), pos2(n), ok(n);
        int cnt = 0, tot = 0;
        for(int j = b0; tot < n; j = (j + 1) % n) {
            tot ++;
            tmp[cnt].x = b[j].x, tmp[cnt].y = b[j].y, tmp[cnt ++].id = b[j].id;
        }
        b = tmp;
        // F(j, 0, n - 1) cout << b[j].id << " \n" [j == n - 1];
        // cout << n << endl;
        F(j, 0, n - 1) pos1[b[j].id] = j;
        // cout << 1 << endl;
        cnt = 0, tot = 0;
        for(int j = b1; tot < n; j = (j + 1) % n) {
            tot ++;
            tmp[cnt].x = c[j].x, tmp[cnt].y = c[j].y, tmp[cnt ++].id = c[j].id;
        }
        c = tmp;
        F(j, 0, n - 1) pos2[c[j].id] = j;

        // cout << 1 << endl;
        // F(j, 0, n - 1) cout << b[j].id << " \n" [j == n - 1];
        // F(j, 0, n - 1) cout << c[j].id << " \n" [j == n - 1];

        int mn = n;
        F(j, 0, n - 1) {
            if(vst[b[j].id]) continue;
            if(mn <= pos2[b[j].id]) ok[b[j].id] = 1;
            mn = min(mn, pos2[b[j].id]);
        } mn = n;
        F(j, 0, n - 1) {
            if(vst[c[j].id]) continue;
            if(mn <= pos1[c[j].id]) ok[c[j].id] = 1;
            mn = min(mn, pos1[c[j].id]);
        } 
        F(j, 0, n - 1) if(! ok[j] && ! vst[j]) res ++;
        // cout << res << "\n";
    }

    cout << res + 1 << "\n";
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    sol();
    return 0;
}
/*
7
1 4
4 0
2 3
3 1
3 5
0 0
2 4

*/

詳細信息

Test #1:

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

input:

7
1 4
4 0
2 3
3 1
3 5
0 0
2 4

output:

9

result:

ok 1 number(s): "9"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3468kb

input:

5
4 0
0 0
2 1
3 3
3 1

output:

5

result:

ok 1 number(s): "5"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3576kb

input:

3
0 0
3 0
0 3

output:

1

result:

ok 1 number(s): "1"

Test #4:

score: 0
Accepted
time: 1ms
memory: 3508kb

input:

6
0 0
3 0
3 2
0 2
1 1
2 1

output:

7

result:

ok 1 number(s): "7"

Test #5:

score: 0
Accepted
time: 0ms
memory: 3500kb

input:

4
0 0
0 3
3 0
3 3

output:

1

result:

ok 1 number(s): "1"

Test #6:

score: 0
Accepted
time: 19ms
memory: 3604kb

input:

2000
86166 617851
383354 -277127
844986 386868
-577988 453392
-341125 -386775
-543914 -210860
-429613 606701
-343534 893727
841399 339305
446761 -327040
-218558 -907983
787284 361823
950395 287044
-351577 -843823
-198755 138512
-306560 -483261
-487474 -857400
885637 -240518
-297576 603522
-748283 33...

output:

718

result:

ok 1 number(s): "718"

Test #7:

score: 0
Accepted
time: 17ms
memory: 3656kb

input:

2000
571314 -128802
-57762 485216
-713276 485201
-385009 -844644
371507 403789
338703 -272265
-913641 438001
-792118 -481524
709494 213762
-913577 432978
-397111 709021
840950 328210
-843628 452653
-20721 126607
-107804 -338102
930109 -89787
-949115 -76479
-862141 455623
991761 94852
-635475 625573
...

output:

658

result:

ok 1 number(s): "658"

Test #8:

score: 0
Accepted
time: 13ms
memory: 3596kb

input:

2000
-510540 -289561
-602648 -189950
-403224 944455
-369582 -41334
358122 -598933
-817147 470207
-440180 -735160
-705634 61719
319062 897001
-905089 -755682
-408371 -520115
-423336 548115
-590242 835990
208155 883477
-202087 142035
-71545 411206
570690 -673204
-228451 -903435
-732876 -570271
-246755...

output:

309

result:

ok 1 number(s): "309"

Test #9:

score: 0
Accepted
time: 3ms
memory: 3648kb

input:

2000
-532115 566389
138405 49337
398814 -97324
116833 113216
381728 877609
222402 641022
109920 952381
-113880 395181
13780 -572931
-676608 605202
-74328 -503839
-207767 926500
-663270 -146303
197877 280349
275865 -663892
-630214 3286
973786 304855
-493735 841584
394901 -505975
757960 204724
-373328...

output:

239

result:

ok 1 number(s): "239"

Test #10:

score: 0
Accepted
time: 11ms
memory: 3600kb

input:

2000
512636 509804
-661126 -592269
755566 -721837
-878213 441853
-236050 -89069
-181220 155656
203391 691764
940154 260513
747075 373881
620423 840991
-409624 335472
270937 -710659
-751290 -673585
250341 -193243
-250535 618887
-739996 543936
-547741 -213681
-82920 -364319
-611672 737719
930798 46731...

output:

1025

result:

ok 1 number(s): "1025"

Test #11:

score: 0
Accepted
time: 11ms
memory: 3648kb

input:

2000
943353 817289
237151 899722
682851 -464873
854225 205354
834550 257948
-260874 298196
-224572 -269157
-667301 881130
-45920 -696359
-634337 792620
-408527 -947513
582880 172669
921645 839423
833813 721080
-836662 -287230
-55783 -408594
108996 -122012
365647 -789544
313812 833502
970009 -737736
...

output:

218

result:

ok 1 number(s): "218"

Test #12:

score: 0
Accepted
time: 3ms
memory: 3648kb

input:

2000
619248 227987
-252490 -553032
148050 -479727
-333707 -591482
-40488 -503144
561909 255624
-402541 -798967
-245811 -610006
-146584 -517935
226433 -92580
-81939 -828480
72540 -845547
502613 220323
66708 -573015
601886 258752
406443 257854
232970 -671600
-37023 -683767
602339 456757
-440096 -71899...

output:

7

result:

ok 1 number(s): "7"

Test #13:

score: 0
Accepted
time: 3ms
memory: 3604kb

input:

2000
-602451 2956
85982 141739
-185932 -208897
-716095 58215
-468047 155612
-791626 -3105
75700 -484098
609608 -304849
689485 -106857
533177 -285261
-659400 -241162
-369302 165482
406663 265940
-353843 -788313
805885 -75440
-571955 -60471
351360 -81373
-510926 -59456
591713 179588
534794 -118
201630...

output:

66

result:

ok 1 number(s): "66"

Test #14:

score: 0
Accepted
time: 4ms
memory: 3636kb

input:

2000
41203 -675424
-158994 366628
-133859 -595680
435466 687630
687811 -35017
314337 133049
-384711 444777
54850 -760922
526166 282618
572292 94793
-324003 621393
-30308 242225
612969 -231837
-56628 -892609
-492077 58749
29597 -349591
198510 219502
380955 -59845
839171 -40068
88185 -820614
-572977 -...

output:

43

result:

ok 1 number(s): "43"

Test #15:

score: 0
Accepted
time: 5ms
memory: 3600kb

input:

2000
-814040 46114
-324077 -522697
388552 -604274
-252898 43028
-757069 141507
413462 -649779
-281915 -316285
-498931 -573214
-408766 670792
-271435 -393170
87187 731739
89312 -853584
-768680 -307261
-185324 234729
-70493 -354866
16452 164338
-650791 -518077
851196 -259322
-85395 -509349
241593 5074...

output:

129

result:

ok 1 number(s): "129"

Test #16:

score: 0
Accepted
time: 9ms
memory: 3604kb

input:

2000
23103 -796677
-148322 67634
-525131 -446626
2672 584671
-712789 -69579
-91150 -429393
-375635 -487235
-680553 -370975
793181 -383683
-234131 -462420
-734705 -171834
322671 -355011
760005 224249
700248 -352775
416862 -125857
-497951 717254
677084 -451876
-220123 616240
525973 -144881
-300828 553...

output:

1466

result:

ok 1 number(s): "1466"

Test #17:

score: 0
Accepted
time: 22ms
memory: 3608kb

input:

2000
-185174 470373
-772343 -70370
-182314 851727
661615 -250979
-581175 527646
332025 141502
-659052 -506788
-378459 -553180
11233 162287
469975 -572356
679074 217029
-137967 727723
581696 140544
452574 -319370
120895 129820
772655 -330960
122860 823902
-786221 147543
-206152 -373647
-212943 4820
6...

output:

2801

result:

ok 1 number(s): "2801"

Test #18:

score: 0
Accepted
time: 38ms
memory: 3608kb

input:

2000
-718158 695879
655921 595312
-509080 -860718
540612 244159
-83221 -865654
-460513 -542465
102321 -775593
328552 799263
-284269 -725108
152140 549502
-108610 465054
-97837 -449762
-772869 -171472
293831 -711723
508617 -157976
170737 323070
544222 385453
-633043 -233165
-620164 -459706
507218 338...

output:

14445

result:

ok 1 number(s): "14445"

Test #19:

score: 0
Accepted
time: 84ms
memory: 3616kb

input:

2000
-587991 -165467
-530325 -5525
-574943 180654
-496535 -748102
-436469 -160646
110285 237070
-822862 -141480
-177189 327799
-424868 331309
-999274 38095
-745710 192605
-234174 -804258
586432 -176239
-626756 499109
-562606 826724
890245 455480
-32262 -298900
550800 516690
-588632 -368654
405331 -3...

output:

64358

result:

ok 1 number(s): "64358"

Test #20:

score: 0
Accepted
time: 207ms
memory: 3668kb

input:

2000
441575 -414673
651578 -449237
287355 -489950
606811 -30288
-733692 679481
-652568 89883
-360110 616801
190405 -368787
-352383 935855
118240 73038
-374899 -927065
-22183 -491455
-146229 638417
998825 -48442
-374469 243261
988830 149043
-778607 -291542
-277026 -167975
372912 -405043
535321 425727...

output:

233885

result:

ok 1 number(s): "233885"

Test #21:

score: 0
Accepted
time: 329ms
memory: 3720kb

input:

2000
-369265 -366669
-225059 -65255
750236 -107534
-252341 967638
533029 -79205
-482639 504243
-164616 -477455
-219649 975578
222020 297565
-548636 -836060
595498 -345235
-971961 -235140
179392 983777
747498 664263
-458850 -513884
-456639 186799
508542 -359953
630300 5257
-294961 -599723
999627 2729...

output:

430546

result:

ok 1 number(s): "430546"

Test #22:

score: 0
Accepted
time: 367ms
memory: 3620kb

input:

2000
-586906 -809654
-279647 960102
-279925 501031
-76716 526333
-277891 -599253
171606 -289251
565124 -825005
-125381 -163097
-71257 -202933
999551 29949
286017 -698748
257733 358898
6047 18648
283230 -959051
221238 -975219
686818 32684
368089 -929790
-689242 449329
-547431 836850
612952 -790120
-9...

output:

484966

result:

ok 1 number(s): "484966"

Test #23:

score: 0
Accepted
time: 398ms
memory: 3644kb

input:

2000
-360385 -932803
6402 -568575
477942 -878390
361387 -497256
-383874 -126116
-838786 214745
157834 -987465
955879 293759
-91170 -521309
262250 964999
883045 -469287
350745 823160
999731 -23179
-791215 8792
208002 153508
-553609 549966
-345358 591962
-613852 198594
81698 996657
803702 98789
201163...

output:

513300

result:

ok 1 number(s): "513300"

Test #24:

score: 0
Accepted
time: 399ms
memory: 3644kb

input:

2000
-996201 87077
834777 -550587
-316381 948632
750921 -473436
-170208 -985408
-98642 17818
735787 -677212
80294 -996771
-420703 594219
995302 -96813
997685 68003
-680287 396657
-986559 163401
313494 442433
-774277 632845
809816 -586683
-569560 692991
956486 -291775
992620 -121264
998004 -63141
-64...

output:

528222

result:

ok 1 number(s): "528222"

Test #25:

score: 0
Accepted
time: 387ms
memory: 3644kb

input:

2000
-876642 481141
513009 -76454
48555 998820
-665181 11267
-681766 -551841
-724328 30683
-594565 -308913
799027 -601295
390878 658489
300660 953731
-227699 973731
621281 283696
871533 490336
-363638 931539
592572 805516
330089 201429
-282723 -959201
-351348 316419
-5935 -999982
-413615 -910451
-14...

output:

527976

result:

ok 1 number(s): "527976"

Test #26:

score: 0
Accepted
time: 411ms
memory: 3620kb

input:

2000
-496177 868221
-142749 -989758
-999462 -32767
-496370 452632
-50957 -998700
549450 25036
-389116 607514
164685 -287576
546553 837424
-356561 934271
250395 -662914
752586 452605
-803752 594963
-978350 206954
983866 178904
-712386 -247430
494205 -869345
777893 628396
-91446 995809
-373660 927565
...

output:

536419

result:

ok 1 number(s): "536419"

Test #27:

score: 0
Accepted
time: 411ms
memory: 3652kb

input:

2000
-20062 470240
889867 456219
84686 996407
-54908 580599
428693 -903450
-150993 -781447
-437742 -134074
-245186 -299633
216878 730546
-588614 808414
-945245 326360
-72396 -11572
-663429 748238
-538386 842697
463983 400770
716299 697792
161751 -986831
931604 -363474
-466293 884630
163252 -116392
4...

output:

541774

result:

ok 1 number(s): "541774"

Test #28:

score: 0
Accepted
time: 410ms
memory: 3732kb

input:

2000
125380 -992108
876963 480556
-954331 -298750
-872744 488177
-667627 744495
527592 -849497
-41014 -455304
13780 890561
-637070 -474060
858293 513158
-422631 -408446
792248 610198
272933 -962032
768663 -639653
957724 -287686
-655707 -72182
774032 633145
44910 -998991
767034 -220288
32566 -999469
...

output:

554369

result:

ok 1 number(s): "554369"

Test #29:

score: 0
Accepted
time: 418ms
memory: 3612kb

input:

2000
877194 480134
721871 -692027
-657316 -753614
-141802 690188
-984203 -177038
499512 866306
60213 331650
667197 -744880
790745 -612145
526658 70820
-975342 -220697
-818975 126696
-206901 13958
-217847 783500
-498782 460388
214283 -976771
124783 992183
-826617 562763
-869768 -493460
-360542 721516...

output:

556266

result:

ok 1 number(s): "556266"

Test #30:

score: 0
Accepted
time: 441ms
memory: 3612kb

input:

2000
-928276 -371891
693025 -720912
340453 -741801
-315399 948959
-999987 -5058
957766 -287546
-11785 -999930
-480620 876928
-591790 -806091
430900 -490816
232828 972517
709950 -704252
-784773 619782
-40706 -999171
972505 232879
57240 360935
837945 25369
-349605 -537128
-50451 -998726
357173 300683
...

output:

578226

result:

ok 1 number(s): "578226"

Test #31:

score: 0
Accepted
time: 466ms
memory: 3620kb

input:

2000
588463 808523
-653251 -757141
-216959 -976180
620816 -783955
-917704 397264
642866 765978
-965972 -258645
-662131 -749387
919793 -392403
81500 -385642
-860281 -509819
-976258 216610
-881856 -471517
781371 -274463
-769776 638313
996471 -83936
-149837 -988710
88728 -996055
621852 -125590
193779 4...

output:

599788

result:

ok 1 number(s): "599788"

Test #32:

score: 0
Accepted
time: 457ms
memory: 3612kb

input:

2000
-713963 -700183
149576 -48137
-904609 -426240
603724 -34474
-350076 178901
-692350 211723
-777299 -629130
-996510 -83463
343004 -939333
696533 554432
-288734 -640484
798029 602618
-327795 -944748
523003 852330
-49570 998770
263409 254892
-314451 619311
-368911 444305
-289455 -406382
-63806 -648...

output:

607941

result:

ok 1 number(s): "607941"

Test #33:

score: 0
Accepted
time: 476ms
memory: 3616kb

input:

2000
-979883 199570
812775 582577
-257939 966161
-874515 -484998
293436 -242001
749548 -288423
-671752 740775
-12769 999918
295251 955419
175054 -13528
-334691 -942327
539352 -842079
705797 -49973
348168 771901
859906 510451
121051 -572684
909626 -415426
-255421 -545286
962040 272906
-813562 581477
...

output:

605021

result:

ok 1 number(s): "605021"

Test #34:

score: -100
Wrong Answer
time: 485ms
memory: 3688kb

input:

2000
748836 662754
853522 521056
501246 608578
-266167 963926
347098 937828
996632 -82002
300258 -953857
570683 -821169
-399685 -531914
-52991 -536271
-268825 -738298
-440252 449420
936398 350939
-183686 982984
-792809 -609469
-36070 -98167
-769325 638857
957390 288796
-272995 -796868
434336 -294938...

output:

608907

result:

wrong answer 1st numbers differ - expected: '609148', found: '608907'