QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#486931 | #6676. Computational Geometry | duckindog | AC ✓ | 23ms | 5460kb | C++23 | 1.8kb | 2024-07-22 12:11:38 | 2024-07-22 12:11:39 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N = 100'000 + 10;
int n, k;
template<class T>
struct Point {
T x, y;
Point& operator -= (const auto& rhs) { x -= rhs.x; y -= rhs.y; return *this; }
T cross(Point rhs) { return x * rhs.y - rhs.x * y; }
friend istream& operator >> (istream& is, auto& rhs) {
return is >> rhs.x >> rhs.y;
}
friend ostream& operator << (ostream& os, const auto& rhs) {
return os << "(" << rhs.x << ", " << rhs.y << ")";
}
};
using point = Point<long long>;
point p[N];
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
int test; cin >> test;
while (test--) {
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> p[i];
// point origin = p[1];
// for (int i = 1; i <= n; ++i) p[i] -= origin;
// for (int i = 1; i <= n; ++i) cerr << p[i] << "\n";
k += 1;
long long answer = 0, botArea = 0;
deque<int> q(k); iota(q.begin(), q.end(), 1);
for (int i = 1; i < k; ++i) botArea += p[i].cross(p[i % n + 1]);
auto area = [&](int top) { return botArea + p[q.back()].cross(p[top]) + p[top].cross(p[q.front()]); };
auto fwd = [&](int pos) { return pos == n ? 1 : pos + 1; };
int top = fwd(k);
answer = area(top);
auto shiftLeft = [&]() {
if (top == q.back()) top = fwd(top);
while (fwd(top) != q.front() && area(fwd(top)) >= area(top)) top = fwd(top);
answer = max(answer, area(top));
};
shiftLeft();
for (int i = 2; i <= n; ++i) {
botArea -= p[q[0]].cross(p[q[1]]); q.pop_front();
botArea += p[q.back()].cross(p[fwd(q.back())]); q.push_back(fwd(q.back()));
shiftLeft();
}
cout << answer / 2;
if (answer & 1) cout << ".5";
cout << "\n";
}
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3552kb
input:
3 3 1 0 0 1 0 0 1 8 3 1 2 3 1 5 1 7 3 8 6 5 8 3 7 1 5 7 2 3 6 1 1 3 1 7 1 8 1 5 6 4 6
output:
0.5 26.5 20
result:
ok 3 numbers
Test #2:
score: 0
Accepted
time: 0ms
memory: 3696kb
input:
1 4 2 -1000000000 -1000000000 1000000000 -1000000000 1000000000 1000000000 -1000000000 1000000000
output:
4000000000000000000
result:
ok found '4000000000000000000.000000000', expected '4000000000000000000.000000000', error '0.000000000'
Test #3:
score: 0
Accepted
time: 19ms
memory: 3484kb
input:
14246 7 5 -999999980 -999999988 -999999979 -999999984 -999999978 -999999978 -999999979 -999999972 -1000000000 -999999998 -999999993 -1000000000 -999999984 -999999993 6 1 -999999987 -999999987 -999999993 -999999981 -999999998 -999999986 -1000000000 -999999996 -999999995 -1000000000 -999999986 -999999...
output:
230.5 78 173 46 161.5 25 224 78 42 75 113.5 179 227 224.5 459.5 33.5 323 208 14 117 261.5 162.5 136 227.5 91 376 81 502.5 179.5 141 346.5 41 90.5 209 118 183 406.5 49.5 80.5 222.5 394 243 114 402 245.5 386 106 75 297.5 424 269 104 216 174.5 260.5 157.5 610.5 45 50 519.5 516.5 113.5 161 522.5 67.5 55...
result:
ok 14246 numbers
Test #4:
score: 0
Accepted
time: 23ms
memory: 3704kb
input:
14244 6 4 -547850284 -481269250 -1000000000 -714647423 -533299247 -1000000000 656886478 -769438616 700263718 -430440203 106399420 -305601756 10 3 -466281822 506862192 -907094238 85058839 -1000000000 -281869646 -855490497 -478229011 -112167057 -1000000000 147495199 -983428035 704507845 -902383045 828...
output:
732791354437434402.5 1492466916906283434.5 1571608624804175410 853722168331793629.5 1841579555796117823.5 186812625650844482 1374931373816256616 1396248766527417139.5 300749428982044501 1597680977600300477 238431782745048669.5 1905621061870671069.5 1457051885738670384.5 772319614795252917 1671438776...
result:
ok 14244 numbers
Test #5:
score: 0
Accepted
time: 13ms
memory: 3664kb
input:
1000 100 84 -638427072 -696806030 -574275620 -741577840 -517724956 -779879773 -440790977 -831653888 -371696794 -867523797 -292070733 -904513365 -246157947 -920874374 -196125497 -936669098 -120139525 -960537360 -54479671 -978537127 -11534554 -987883373 26411313 -994847568 72263671 -1000000000 1168709...
output:
2901829084045602653.5 327527198347053245.5 1734256029955228808 2416380865036326542 935891084317887469 2828414703961765312 2101460694807832700 2426931532374706265 2679372534658023503.5 2762361281720090419 1176864063012644015 2674175975267185443.5 415161195168528653 1315711122651032242 228203837370924...
result:
ok 1000 numbers
Test #6:
score: 0
Accepted
time: 11ms
memory: 3712kb
input:
100 1000 168 -808847262 -517721134 -803072067 -525448193 -798730847 -531136476 -796502549 -534032203 -791151313 -540928191 -786588703 -546785604 -782732315 -551644783 -780071973 -554976222 -774771946 -561591700 -769683918 -567839156 -769554831 -567997637 -766249149 -572042373 -759870835 -579831042 -...
output:
1028923552719996045 2832301779860078526 2848011247470070271 2506790184987356823.5 2622377875251076131 2556381233480029365.5 2780396909089778369.5 1735531899101324156.5 987263293126023982 2933858965189297928 1940748120157040436 2867130361573929234 2747069586277213982 2751807391149625902 4627851308409...
result:
ok 100 numbers
Test #7:
score: 0
Accepted
time: 19ms
memory: 3696kb
input:
10 10000 3930 374998960 871320826 374305646 871707307 373541784 872131442 372913079 872480119 372247815 872848960 372082544 872940283 371300533 873371391 370696772 873703715 369897687 874143282 369135422 874562333 368787728 874753324 368396307 874968013 367915968 875230945 367376687 875525844 367147...
output:
2095908706043761789 2881509906421599358 860651843537664107 2225240521612313977.5 911084696371304608 2134470965837802211 2924168382633125311.5 1052994530795952349.5 2555680635181519967 2703241471286160570.5
result:
ok 10 numbers
Test #8:
score: 0
Accepted
time: 19ms
memory: 5460kb
input:
1 100000 91077 937469288 -231959258 937491476 -231891836 937502721 -231857664 937522226 -231798381 937545631 -231727224 937556752 -231693411 937581626 -231617767 937594048 -231579990 937605611 -231544822 937620487 -231499574 937644936 -231425160 937656870 -231388830 937680141 -231317975 937699154 -2...
output:
2889987064399269902
result:
ok found '2889987064399269888.000000000', expected '2889987064399269888.000000000', error '0.000000000'