QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#386519 | #5809. Min Perimeter | debgxh | 20 ✓ | 13695ms | 12016kb | C++14 | 1.3kb | 2024-04-11 17:54:17 | 2024-04-11 17:54:20 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 1000005;
int n, T; pair<int, int> A[MAXN];
struct cmp{
bool operator () (const pair<int, int> &l, const pair<int, int> &r) const {
return l.second < r.second || (l.second == r.second && l.first < r.first);
}
};
double dis(const pair<int, int> &l, const pair<int, int> &r){
return hypot(l.first - r.first, l.second - r.second);
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> T; for(int t = 1; t <= T; t++){
cin >> n; double Ans = INFINITY;
multiset<pair<int, int>, cmp> S;
for(int i = 1; i <= n; i++) cin >> A[i].first >> A[i].second;
sort(A + 1, A + n + 1);
for(int i = 1, j = 1; i <= n; i++){
while(j < i && A[i].first - A[j].first > Ans / 2) S.erase(S.find(A[j++]));
auto l = S.lower_bound(pair<int, int>(-1e9, max(-1e9, floor(A[i].second - Ans))));
auto r = S.upper_bound(pair<int, int>( 1e9, min( 1e9, ceil (A[i].second + Ans))));
for(auto x = l; x != r; x++) for(auto y = l; y != x; y++)
Ans = min(Ans, dis(A[i], *x) + dis(*x, *y) + dis(*y, A[i]));
S.insert(A[i]);
}
cout << "Case #" << t << ": " << fixed << setprecision(14) << Ans << '\n';
}
cerr << (double)clock() / CLOCKS_PER_SEC << endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 54ms
memory: 4188kb
input:
15 3 2 6 7 0 3 0 3 713 269 371 79 455 421 3 91983245 637281504 756917015 312173515 869576338 436726680 10000 14761642 78236002 9047458 47951098 5238002 27761162 476182 2523742 1428546 7571226 26190010 138805810 21904372 116092132 18094916 95902196 43332562 229660522 55237112 292754072 52380020 27761...
output:
Case #1: 17.89301220620487 Case #2: 1042.84483496438816 Case #3: 1711142102.79132699966431 Case #4: 90912.29637403292872 Case #5: 3.41421356237309 Case #6: 26.15383034216369 Case #7: 1701.01268109561693 Case #8: 2865438.19199387123808 Case #9: 2020088.33722631959245 Case #10: 1792106.03729207115248 ...
result:
ok correct! (15 test cases)
Subtask #2:
score: 15
Accepted
Test #2:
score: 15
Accepted
time: 13695ms
memory: 12016kb
input:
15 3 501691275 344354353 167768963 536043860 249445040 557426549 4 1000000000 0 0 0 1000000000 1000000000 0 1000000000 1000000 138925776 669369648 61257680 295150640 170762328 822763944 55483472 267329456 97736936 470914328 84041848 404928904 18463588 88960924 124429360 599523280 95066048 458045504 ...
output:
Case #1: 799653579.13308978080750 Case #2: 3414213562.37309503555298 Case #3: 866.07159057435888 Case #4: 62459.89536963714636 Case #5: 59141.91835893177631 Case #6: 898195.09096826799214 Case #7: 1707085.76998678501695 Case #8: 1686.22679825813566 Case #9: 1686.60354597163496 Case #10: 6806.6655839...
result:
ok correct! (15 test cases)
Extra Test:
score: 0
Extra Test Passed