QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#849637 | #8468. Collinear Arrangements | liyujia | WA | 49ms | 8108kb | C++17 | 1.6kb | 2025-01-09 16:49:53 | 2025-01-09 16:49:53 |
Judging History
answer
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define int long long
using namespace std;
const int N = 500005, V = 3e9;
int n, q, x[N], y[N], id[N], X1, Y1, X2, Y2;
unordered_map <int, int> mp;
int calc(int x, int y){
int ans = 1;
if(x < 0) x = -x, x = -x;
if(y < 0) y = -y, x = -x;
int g = abs(__gcd(x, y)); x /= g, y /= g;
return (x * V + y) * ans;
}
int crs(int id){ return (X1 - x[id]) * (Y2 - y[id]) - (X2 - x[id]) * (Y1 - y[id]);}
int cal(int l, int r, int cof){
int ans = 0, mid = l + r >> 1;
if(r - l <= 2) for(int i = l; i <= r; i++) ans += !crs(i);
else if(crs(mid) * cof < 0) ans = cal(mid + 1, r, cof);
else ans = cal(l, mid, cof); return ans;
}
int slv(int l, int r, int cof){
int L = l, R = r, id = l;
while(L + 3 < R){
int mid = L + R >> 1, p1 = crs(mid) * cof, p2 = crs(mid + 1) * cof;
if(p1 < p2) L = mid + 1;
else R = mid;
} for(int i = L; i <= R; i++) if(crs(i) * cof > crs(id) * cof) id = i;
return cal(l, id, cof) + cal(id + 1, r, -cof);
}
signed main(){
cin >> n >> q;
for(int i = 1; i <= n; i++) cin >> x[i] >> y[i];
while(q--){
int t, ans = 0;
cin >> t >> X1 >> Y1;
if(t == 1){
mp.clear();
for(int i = 1; i <= n; i++) ans += mp[calc(X1 - x[i], Y1 - y[i])]++;
cout << ans << "\n";
} else{
cin >> X2 >> Y2; int cof = 1;
if(crs(2) < crs(1)) cof = -1;
int l = 1, r = n;
while(l < r){
int mid = l + r + 1 >> 1;
if(crs(1) * cof > crs(mid) * cof) r = mid - 1;
else l = mid;
}
int ans = slv(1, l, cof) + slv(l + 1, n, -cof);
cout << ans << '\n';
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 7900kb
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: 7676kb
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: 1ms
memory: 7700kb
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: 14ms
memory: 7748kb
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: 8ms
memory: 7744kb
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: 17ms
memory: 7752kb
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: 17ms
memory: 7680kb
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: 10ms
memory: 7988kb
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: 13ms
memory: 7752kb
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: 13ms
memory: 7628kb
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: 17ms
memory: 7632kb
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: 17ms
memory: 7780kb
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: 13ms
memory: 7968kb
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: 49ms
memory: 8108kb
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: -100
Wrong Answer
time: 48ms
memory: 8108kb
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 1 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:
wrong answer 47th numbers differ - expected: '2', found: '1'