QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#848915 | #8468. Collinear Arrangements | CarroT1212 | TL | 124ms | 6136kb | C++14 | 2.9kb | 2025-01-09 10:44:41 | 2025-01-09 10:44:41 |
Judging History
answer
#include <bits/stdc++.h>
#define pb push_back
#define x first
#define y second
using namespace std; bool MEM;
using ll=long long; using ld=long double;
using pii=pair<int,int>; using pll=pair<ll,ll>;
using lin=pair<pll,pll>;
const int I=1e9;
const ll J=1e18,N=2e5+7;
ll n,q,st[N],sz;
ld k[N];
pll a[N];
map<ll,ll> mp;
ll operator * (pll x,pll y) { return x.x*y.y-x.y*y.x; }
pll operator * (pll x,ll y) { return {x.x*y,x.y*y}; }
pll operator + (pll x,pll y) { return {x.x+y.x,x.y+y.y}; }
pll operator - (pll x,pll y) { return {x.x-y.x,x.y-y.y}; }
ld gk(pll x) { return x.x?(ld)x.y/(ld)x.x:J; }
ll dis(pll x,pll y) { return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y)); }
ll chk(lin x,lin y) {
pll xx=x.y-x.x,yy=y.y-y.x,zz=x.y-y.y;
if (xx*yy==0) return yy*zz==0;
ld t=(ld)(zz*yy)/(ld)(xx*yy);
// printf(" (%lld,%lld)-(%lld,%lld) & (%lld,%lld)-(%lld,%lld) %Lf\n",x.x.x,x.x.y,x.y.x,x.y.y,
// y.x.x,y.x.y,y.y.x,y.y.y,t);
return t<1?2:t==1?1:0;
}
ll solve(lin l) {
if (l.x.x==l.y.x) return mp[l.x.x];
ld lk=gk(l.y-l.x); ll ret=0;
ll cl=upper_bound(k+st[0],k+st[1],lk)-k,cr=lower_bound(k+st[1],k+st[2],lk)-1-k;
ll dl=upper_bound(k+st[1],k+st[2],lk)-k,dr=lower_bound(k+st[2],k+st[3],lk)-1-k;
// printf("(%lld,%lld)-(%lld,%lld)\n",l.x.x,l.x.y,l.y.x,l.y.y);
// printf("%lld %lld %lld %lld\n",cl,cr,dl,dr);
if (cr+1<dl&&(a[dl]-a[cr+1])*(l.x-a[dl])==0) ret++;
if (dr+1<cl+n&&(a[cl+n]-a[dr+1])*(l.x-a[cl+n])==0) ret++;
while (cl<=cr) {
ll mid=cl+cr>>1,w=chk({a[mid],a[mid+1]},l);
if (w==1) { ret++; break; }
else if (w==2) cl=mid+1;
else cr=mid-1;
}
while (dl<=dr) {
ll mid=dl+dr>>1,w=chk({a[mid],a[mid+1]},l);
if (w==1) { ret++; break; }
else if (w==2) dl=mid+1;
else dr=mid-1;
}
// printf(" %lld\n",ret);
return ret;
}
void mian() {
scanf("%lld%lld",&n,&q);
for (ll i=0;i<n;i++) scanf("%lld%lld",&a[i].x,&a[i].y),mp[a[i].x]++,a[n+i]=a[i];
a[n*2]=a[0];
for (ll i=0;i<n*2;i++) k[i]=gk(a[i+1]-a[i]);
if (k[0]<k[n-1]) st[sz++]=0;
for (ll i=1;i<n*2;i++) if (k[i]<k[i-1]) st[sz++]=i;
// for (ll i=0;i<n*2;i++) printf("%.1Lf ",k[i]); printf("\n");
// printf("%lld %lld %lld %lld\n",st[0],st[1],st[2],st[3]);
for (ll opt;q--;) {
scanf("%lld",&opt);
pll s,t;
if (opt==1) {
scanf("%lld%lld",&s.x,&s.y);
ll ans=0;
for (ll i=0;i<n;i++) ans+=solve({s,a[i]})==2;
cout<<ans/2<<"\n";
// ll flg=1,ans=0;
// for (ll i=0;i<n;i++) if ((a[i+1]-a[i])*(s-a[i])<=0) flg=0;
// if (flg) {
// for (ll i=0,j=0;i<n;i++) {
// while ((a[j+1]-a[i])*(s-a[i])>=0) j++;
// if (i!=j&&(a[j+1]-a[i])*(s-a[i])==0) ans++;
// }
// }
// else {
// }
// cout<<ans<<"\n";
}
else {
scanf("%lld%lld%lld%lld",&s.x,&s.y,&t.x,&t.y);
cout<<solve({s,t})<<"\n";
}
}
}
bool ORY; int main() {
// while (1)
// int t; for (scanf("%d",&t);t--;)
mian();
cerr<<"\n"<<abs(&MEM-&ORY)/1048576<<"MB";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5840kb
input:
5 3 0 0 2 0 2 1 1 2 0 2 1 1 1 2 1 1 2 2 1 2 2
output:
1 1 2
result:
ok 3 number(s): "1 1 2"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5784kb
input:
3 1 0 0 1 0 0 1 2 1 1 2 2
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 5980kb
input:
1000 1 -139438978 -172098481 -125097652 -169056403 155419484 -28898293 186215972 6874955 240691742 77644763 334255616 236444333 342049790 274206233 342049766 274611851 342049472 275025569 342049298 275242193 342048794 275724449 341967248 297262013 341966000 297569423 341963012 298092233 341960624 29...
output:
2
result:
ok 1 number(s): "2"
Test #4:
score: 0
Accepted
time: 24ms
memory: 5988kb
input:
1000 1000 -468718512 100559444 -466285968 100587272 -463035240 100649294 -461326068 100761398 -459427038 100900610 -455064924 101233256 -452216364 101462348 -450021522 101653544 -449086266 101738960 -433665372 103152428 -429959922 103532498 -427457166 103795826 -418983006 104802926 -416443854 105124...
output:
1 2 2 1 1 2 1 2 1 2 1 1 1 0 0 1 2 1 1 2 0 0 0 2 0 2 2 1 1 1 1 1 1 0 0 1 1 2 1 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 2 1 2 1 0 0 1 1 2 1 1 0 1 1 2 0 1 0 0 2 1 0 1 0 0 0 1 2 1 2 0 1 0 0 1 1 0 0 0 2 2 1 0 2 1 0 1 1 1 1 1 0 1 1 1 1 2 1 1 2 1 2 2 0 2 2 0 0 0 2 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 0 0 2 1 ...
result:
ok 1000 numbers
Test #5:
score: 0
Accepted
time: 30ms
memory: 5844kb
input:
1000 1000 291905682 -484091301 292345158 -484089105 293043996 -484085421 293229030 -484083753 294173520 -484069809 295110540 -484052169 295788516 -484035897 296416644 -484020435 297309864 -483994563 298153872 -483966843 298820190 -483943245 299094912 -483933453 299710446 -483910407 300478542 -483880...
output:
0 0 0 1 1 2 1 1 1 1 2 2 1 0 0 1 1 0 1 0 0 1 2 1 2 0 2 1 0 1 0 1 2 1 1 0 0 0 2 1 0 2 1 0 1 1 2 0 2 0 1 0 1 0 1 0 1 0 1 2 2 2 0 1 1 1 2 1 2 0 1 2 0 2 2 1 2 1 0 0 0 0 1 0 2 2 1 1 0 1 1 0 0 0 0 1 1 1 1 2 2 0 2 2 1 1 1 0 0 2 1 2 1 0 1 0 2 2 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 2 1 0 0 0 1 2 1 1 0 0 0 1 ...
result:
ok 1000 numbers
Test #6:
score: 0
Accepted
time: 28ms
memory: 5908kb
input:
1000 1000 463991467 -623310294 464470495 -623309436 465819133 -623286270 467660659 -623248944 468504043 -623229894 469509451 -623204460 470851615 -623169126 471516523 -623147304 472441747 -623112894 472919839 -623093316 474518035 -623025924 474804205 -623012706 475235047 -622991898 476703709 -622918...
output:
1 1 0 2 2 2 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 2 1 1 2 1 1 1 1 0 2 0 0 1 1 1 0 1 1 2 0 0 2 2 2 1 1 1 1 1 1 1 0 1 2 1 1 1 0 2 1 1 2 1 0 1 0 2 1 1 1 1 2 1 0 0 2 1 2 0 0 2 1 2 1 0 2 1 1 0 1 1 1 2 2 1 1 2 1 1 2 1 2 0 0 0 0 0 2 1 1 1 1 1 0 0 1 1 2 0 1 0 0 1 1 0 1 0 1 1 2 1 1 2 1 2 0 1 0 1 0 2 0 0 2 0 0 2 2 0 ...
result:
ok 1000 numbers
Test #7:
score: 0
Accepted
time: 29ms
memory: 5856kb
input:
1000 1000 597768588 -776829559 695444592 -772463455 710728284 -769091269 734199300 -761581069 739470810 -759493921 753859266 -752938249 776956332 -740945395 796659384 -730287457 808527768 -720807907 812395620 -716639341 825659472 -700122877 827653218 -697247683 842474466 -675492391 851577600 -653064...
output:
1 1 1 1 1 1 1 0 0 1 0 1 2 1 1 1 1 0 1 1 0 0 1 1 2 0 1 0 1 1 1 2 1 1 2 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 1 2 1 1 1 1 0 1 2 1 2 2 1 1 1 2 0 1 0 1 0 0 1 0 1 1 1 2 1 1 0 1 1 0 1 1 1 2 2 1 0 0 1 2 0 2 1 2 1 2 1 1 0 1 0 1 0 0 2 2 1 0 2 0 2 1 1 0 1 0 1 0 0 1 2 1 2 1 0 1 1 1 2 1 0 0 0 0 1 1 1 ...
result:
ok 1000 numbers
Test #8:
score: 0
Accepted
time: 32ms
memory: 5836kb
input:
1000 1000 579713329 -733712553 582502873 -733705833 583276357 -733693923 584906899 -733655109 585175081 -733646925 585834175 -733622973 586633297 -733577085 587460043 -733521285 588822205 -733427661 590453503 -733304973 597306625 -732777171 598333501 -732693489 599098081 -732627291 600848677 -732431...
output:
1 1 0 0 0 0 0 1 2 1 1 1 0 1 0 2 1 2 1 2 0 2 2 2 1 1 0 1 0 0 1 2 2 1 1 1 1 2 2 1 1 0 1 1 0 1 1 1 1 2 0 0 2 1 1 1 1 1 2 1 1 2 0 2 1 1 1 0 1 1 2 1 1 0 1 1 1 2 2 1 2 1 1 1 2 1 1 2 1 0 1 0 1 1 2 1 1 0 1 1 1 1 1 0 1 1 0 1 1 2 1 0 1 1 2 1 2 0 0 1 1 0 1 1 0 2 1 1 1 1 1 1 0 0 1 2 1 2 1 0 1 0 2 1 0 2 1 1 1 0 ...
result:
ok 1000 numbers
Test #9:
score: 0
Accepted
time: 28ms
memory: 5932kb
input:
1000 1000 383687106 -662965444 404629848 -661971364 456196932 -656303110 481565838 -653442130 491580000 -652286890 513183840 -649621300 524886738 -648156736 541734714 -643846294 553325220 -640595362 571836426 -634565194 585246582 -627706948 591259860 -623361106 597943836 -617700448 605975550 -610284...
output:
0 1 0 0 0 1 1 2 1 0 1 0 1 2 1 0 0 1 1 1 1 1 1 0 1 0 0 1 2 1 1 1 1 2 1 2 1 1 1 1 1 0 1 1 2 0 1 1 0 2 1 0 1 0 1 2 1 2 1 1 0 0 1 1 0 2 0 0 1 2 1 1 1 2 2 0 1 2 2 1 0 0 1 1 1 2 1 1 2 0 0 2 0 1 0 0 2 0 1 1 0 1 1 2 1 1 1 1 2 1 0 1 0 0 2 1 0 1 0 1 0 1 2 1 0 0 0 0 0 0 2 0 1 1 1 0 2 2 0 0 0 1 0 0 1 2 1 1 0 1 ...
result:
ok 1000 numbers
Test #10:
score: 0
Accepted
time: 30ms
memory: 5868kb
input:
1000 1000 -89995087 -831851181 -87346021 -831828921 -84891511 -831744171 -79568203 -831225225 -76494727 -830921307 -73235665 -830589153 -66234565 -829871907 -61345657 -829265043 -56094727 -828518091 -47397535 -827143263 -45247975 -826735329 -38182327 -825371001 -32179177 -823926267 -27420181 -822702...
output:
2 1 2 0 2 0 1 0 2 1 1 1 1 2 2 1 2 2 1 2 2 1 2 1 1 1 2 1 1 1 1 2 1 0 1 1 2 0 1 1 2 0 1 2 0 1 1 0 0 1 1 1 1 1 1 0 0 1 2 0 1 0 0 2 1 0 1 1 2 1 0 0 1 2 2 1 0 1 0 1 1 2 1 0 0 1 2 1 0 1 1 0 1 1 0 2 1 2 0 1 1 0 1 0 0 1 0 1 0 0 1 1 1 1 2 1 2 1 0 1 0 0 1 1 1 2 0 1 1 2 1 2 0 0 1 1 1 1 1 1 1 0 0 1 1 0 2 1 0 0 ...
result:
ok 1000 numbers
Test #11:
score: 0
Accepted
time: 30ms
memory: 5936kb
input:
1000 1000 -521920755 -589450110 -520843161 -589430664 -517059531 -589333902 -516294063 -589313100 -515588943 -589289712 -514711401 -589245060 -514212489 -589217784 -513590589 -589180032 -513090177 -589143018 -512462637 -589093266 -510832209 -588943758 -510717465 -588932748 -510366333 -588897438 -508...
output:
1 0 0 0 1 1 1 1 0 2 1 2 0 1 1 2 1 1 0 0 0 1 1 1 0 1 0 0 1 1 1 1 2 1 2 1 0 1 2 1 1 1 0 1 1 2 1 0 2 1 2 1 1 1 0 2 1 2 1 0 0 1 1 1 0 2 1 0 0 0 0 2 1 1 0 2 0 2 2 0 1 1 1 1 2 0 2 1 2 2 1 1 1 2 2 0 0 0 1 1 1 0 1 2 1 1 1 2 1 2 1 2 1 1 2 0 0 2 2 1 0 2 0 1 1 1 1 0 1 0 2 1 1 2 2 0 2 2 0 1 0 1 0 1 0 2 1 0 0 1 ...
result:
ok 1000 numbers
Test #12:
score: 0
Accepted
time: 31ms
memory: 5824kb
input:
1000 1000 135678973 -512731173 138245143 -512730873 139620511 -512727279 140549359 -512723109 141179551 -512719341 143033407 -512699013 144022339 -512685993 144735325 -512673687 145503247 -512659455 147606127 -512618625 148360033 -512597373 149010193 -512578485 149738023 -512546715 149970055 -512536...
output:
0 1 0 0 1 1 0 2 0 2 1 1 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 2 1 0 1 0 2 1 2 0 0 1 1 2 1 0 1 0 1 1 2 1 1 2 1 2 2 1 0 1 2 0 0 1 0 1 1 0 1 2 0 1 1 0 1 0 1 1 0 2 0 0 0 2 0 2 2 0 1 1 2 0 0 1 1 2 2 1 1 0 1 0 0 1 0 1 0 0 0 1 1 2 1 1 0 2 0 0 1 0 1 0 1 0 1 1 1 1 2 1 1 0 0 2 2 0 0 0 2 1 1 1 1 1 0 1 2 1 0 1 1 1 2 0 ...
result:
ok 1000 numbers
Test #13:
score: 0
Accepted
time: 30ms
memory: 5932kb
input:
1000 1000 351347924 -65748475 372897926 -65360617 383223914 -65023771 395934266 -64493569 518888294 -52852315 534293948 -49392937 547110512 -45728953 559110452 -41992699 564454634 -40209025 568267940 -37798795 570194018 -36499723 575066318 -32769325 577860548 -30401929 589115126 -18589639 592627520 ...
output:
2 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 2 2 2 1 1 1 0 1 1 0 1 1 2 2 0 1 0 2 2 1 1 1 2 0 0 1 0 2 1 1 0 2 1 0 2 0 1 1 1 2 0 1 2 1 1 0 1 0 1 1 0 1 0 2 1 0 2 1 1 0 2 1 1 0 0 1 1 2 1 0 1 1 0 1 2 1 2 0 1 1 1 1 1 0 1 2 0 1 1 2 0 2 1 1 1 2 0 0 1 1 2 1 1 2 1 2 1 0 1 0 1 1 1 1 2 1 0 1 0 1 0 1 1 2 1 1 2 0 1 2 1 ...
result:
ok 1000 numbers
Test #14:
score: 0
Accepted
time: 122ms
memory: 5928kb
input:
3920 1000 0 -1179960 60 -1179960 2460 -1179900 4800 -1179840 7080 -1179780 9300 -1179720 11460 -1179660 13560 -1179600 15600 -1179540 17580 -1179480 19500 -1179420 21360 -1179360 23160 -1179300 24900 -1179240 26580 -1179180 28200 -1179120 29760 -1179060 31260 -1179000 32700 -1178940 34080 -1178880 3...
output:
2 1960 1 2 1 0 0 0 1 0 1 1 1960 2 0 0 1 0 0 0 1 0 2 0 0 1 2 2 0 1 0 2 1 1 1 0 0 0 1 1 1 1960 1 0 0 0 0 1960 0 0 0 1 2 0 0 1 2 1 0 1 0 1 1 2 2 1960 0 0 2 2 2 1 0 2 2 2 1 1960 0 0 0 2 0 2 1 1 0 0 0 1960 2 0 2 2 1 2 1 2 1 1 0 1 1 2 0 0 2 0 0 1 0 2 1 2 2 1 1 1960 1 1 0 1 0 2 1 1960 1 1 2 1 2 2 1 0 1 1 0...
result:
ok 1000 numbers
Test #15:
score: 0
Accepted
time: 118ms
memory: 6136kb
input:
3920 1000 0 -1179960 60 -1179960 2460 -1179900 4800 -1179840 7080 -1179780 9300 -1179720 11460 -1179660 13560 -1179600 15600 -1179540 17580 -1179480 19500 -1179420 21360 -1179360 23160 -1179300 24900 -1179240 26580 -1179180 28200 -1179120 29760 -1179060 31260 -1179000 32700 -1178940 34080 -1178880 3...
output:
1 1 1 0 1 1 0 0 0 2 0 1 1 2 2 1 1 1 1 1 1 1 2 1960 1 2 0 2 2 2 1 1 0 1960 2 1 0 0 1 0 2 0 0 1960 1 1 2 1 0 1960 0 1 0 2 0 1 2 0 0 2 2 0 2 1960 1 2 2 1 0 2 0 0 2 2 2 0 0 1 1960 2 1 0 1 1 1 0 1960 2 0 1 0 0 0 0 1 2 1 0 0 1 0 1 1 0 0 2 1 2 1 1 2 2 2 0 1 1 0 2 2 0 1 1960 0 1 0 0 1 1 0 1 0 2 1 2 1 0 1 2 ...
result:
ok 1000 numbers
Test #16:
score: 0
Accepted
time: 121ms
memory: 5984kb
input:
3920 1000 0 -1179960 60 -1179960 2460 -1179900 4800 -1179840 7080 -1179780 9300 -1179720 11460 -1179660 13560 -1179600 15600 -1179540 17580 -1179480 19500 -1179420 21360 -1179360 23160 -1179300 24900 -1179240 26580 -1179180 28200 -1179120 29760 -1179060 31260 -1179000 32700 -1178940 34080 -1178880 3...
output:
1 2 0 2 1 1960 2 1 0 1 1 1 2 2 2 1 1 0 2 1 1 2 2 1 1 0 0 1 2 0 2 1960 1 2 1960 1 2 1 0 0 1960 1 1 1960 1 0 1960 1 0 1960 1 1 0 0 0 0 1 2 0 2 0 0 1 1960 1 1 1 1 0 2 0 1 0 0 0 1 2 0 0 0 0 1 1 2 1 0 0 1 0 2 1 0 1 0 0 1 2 1 0 0 0 1 2 1960 2 2 2 1 1 0 2 0 1960 2 1 2 1960 1 0 0 1960 1 2 1 2 0 1 1 0 1 0 0 ...
result:
ok 1000 numbers
Test #17:
score: 0
Accepted
time: 124ms
memory: 5972kb
input:
3920 1000 0 -1179960 60 -1179960 2460 -1179900 4800 -1179840 7080 -1179780 9300 -1179720 11460 -1179660 13560 -1179600 15600 -1179540 17580 -1179480 19500 -1179420 21360 -1179360 23160 -1179300 24900 -1179240 26580 -1179180 28200 -1179120 29760 -1179060 31260 -1179000 32700 -1178940 34080 -1178880 3...
output:
0 1 1 2 2 1 1 2 0 1 0 0 0 2 1 0 1 1 4 1 0 2 2 1 0 2 0 0 0 2 2 1 0 1 1 1 2 2 0 1 2 1 1 2 1 2 1 2 2 0 0 2 1 1 2 1 1 2 0 1 1 1 0 1 1 2 0 0 1 1 0 1 1 2 1960 1 2 2 1 0 1 0 2 2 1960 2 1 2 0 1 2 0 1 1 0 2 2 1960 0 1 2 1 1 1 1 0 1 2 1 0 0 0 2 2 1 2 2 2 1 0 0 2 1 0 1 1960 2 1 0 1 1 0 0 1 0 0 1 1 1 0 2 2 2 2 ...
result:
ok 1000 numbers
Test #18:
score: 0
Accepted
time: 122ms
memory: 6056kb
input:
3920 1000 0 -1179960 60 -1179960 2460 -1179900 4800 -1179840 7080 -1179780 9300 -1179720 11460 -1179660 13560 -1179600 15600 -1179540 17580 -1179480 19500 -1179420 21360 -1179360 23160 -1179300 24900 -1179240 26580 -1179180 28200 -1179120 29760 -1179060 31260 -1179000 32700 -1178940 34080 -1178880 3...
output:
1 0 0 1 1 2 0 0 1 1960 0 0 1 1 2 2 1 1 0 0 1 1 1 1 0 2 2 1 0 2 1960 0 0 1960 2 1 0 2 1 0 1 2 0 2 2 0 2 0 2 1960 0 1 0 0 0 2 0 1 1 1 1 2 1 0 2 1 0 1 1 1 1 1 1960 1 2 1 2 1 1 1960 1 1 0 1 1 1 0 2 0 0 2 1 1 1960 0 1960 0 1960 1 1 1 0 2 0 0 2 0 2 1 1 0 0 1 0 0 0 1 2 0 1 0 2 2 0 2 2 0 1960 1 1 1 0 0 0 0 ...
result:
ok 1000 numbers
Test #19:
score: -100
Time Limit Exceeded
input:
100000 100000 -418102239 223818986 -418082643 223818992 -418037097 223819010 -418023831 223819016 -418013145 223819022 -418002855 223819028 -417913239 223819082 -417895167 223819094 -417868593 223819112 -417852999 223819124 -417829815 223819142 -417815205 223819154 -417786147 223819184 -417768957 22...