QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#386504#5809. Min Perimeterdebgxh5 124ms4216kbC++141.3kb2024-04-11 17:37:582024-04-11 17:37:58

Judging History

你现在查看的是最新测评结果

  • [2024-04-11 17:37:58]
  • 评测
  • 测评结果:5
  • 用时:124ms
  • 内存:4216kb
  • [2024-04-11 17:37:58]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 1000005;
int n, T; pair<double, double> A[MAXN];
struct cmp{
  bool operator () (const pair<double, double> &l, const pair<double, double> &r) const {
    return l.second < r.second || (l.second == r.second && l.first < r.first);
  }
};
double dis(const pair<double, double> &l, const pair<double, double> &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<double, double>, 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) S.erase(S.find(A[j++]));
      auto l = S.lower_bound(make_pair(-INFINITY, A[i].second - Ans));
      auto r = S.upper_bound(make_pair( INFINITY, 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: 124ms
memory: 4216kb

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: 0
Time Limit Exceeded

Test #2:

score: 0
Time Limit Exceeded

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:


result: