QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#279007 | #7906. Almost Convex | ucup-team1508# | WA | 485ms | 3732kb | C++20 | 5.0kb | 2023-12-08 00:56:20 | 2023-12-08 00:56:20 |
Judging History
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
*/
Details
Tip: Click on the bar to expand more detailed information
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'