답안 #557419

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
557419 2022-05-05T10:18:10 Z 600Mihnea Road Construction (JOI21_road_construction) C++17
5 / 100
10000 ms 5116 KB
#include <bits/stdc++.h>

bool home = 1;

using namespace std;

typedef long long ll;
const int N=250000+7;

struct T{
  ll x;
  ll y;
};

bool cmpTx(T a, T b) {
  return a.x>b.x;
}

int n;
int k;
T a[N];

ll how_many_under(ll d) {

  ll sol=0;
  for (int i=1;i<=n;i++) {
    for (int j=i+1;j<=n;j++) {
      if (a[j].y<=a[i].y) {
        if(a[j].x+a[j].y>=a[i].x+a[i].y-d){
          sol++;
        }
      }else{
        if(a[j].y-a[j].x<=d+a[i].y-a[i].x){
          sol++;
        }
      }
    }
  }
  return sol;
}

signed main() {
#ifdef ONLINE_JUDGE
  home = 0;
#endif

  home=0;

  if (home) {
    freopen("I_am_iron_man", "r", stdin);
  }
  else {
    ios::sync_with_stdio(0); cin.tie(0);
  }

  cin>>n>>k;

  for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;

  sort(a+1,a+n+1,cmpTx);


  ll low=0,high=(ll)1e10,sol=-1;

  while (low<=high) {
    ll mid=(low+high)/2;
    if(how_many_under(mid)<=k) {
      sol=mid;
      low=mid+1;
    }else{
      high=mid-1;
    }
  }
  vector<ll> v;
  for (int i=1;i<=n;i++) {
    for(int j=i+1;j<=n;j++) {
      ll dij=abs(a[i].x-a[j].x)+abs(a[i].y-a[j].y);
      if(dij<=sol){
        v.push_back(dij);
      }
    }
  }
  sort(v.begin(),v.end());
  assert((int)v.size()<=k);
  v.resize(k, sol+1);
  for (auto &x: v) {
    cout<<x<<"\n";
  }
}

Compilation message

road_construction.cpp: In function 'int main()':
road_construction.cpp:50:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |     freopen("I_am_iron_man", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 4932 KB Output is correct
2 Correct 72 ms 4936 KB Output is correct
3 Correct 54 ms 5056 KB Output is correct
4 Correct 52 ms 5116 KB Output is correct
5 Correct 71 ms 3768 KB Output is correct
6 Correct 35 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 10045 ms 4184 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 10061 ms 4172 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 10061 ms 4172 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 4932 KB Output is correct
2 Correct 72 ms 4936 KB Output is correct
3 Correct 54 ms 5056 KB Output is correct
4 Correct 52 ms 5116 KB Output is correct
5 Correct 71 ms 3768 KB Output is correct
6 Correct 35 ms 340 KB Output is correct
7 Execution timed out 10077 ms 1876 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 4932 KB Output is correct
2 Correct 72 ms 4936 KB Output is correct
3 Correct 54 ms 5056 KB Output is correct
4 Correct 52 ms 5116 KB Output is correct
5 Correct 71 ms 3768 KB Output is correct
6 Correct 35 ms 340 KB Output is correct
7 Execution timed out 10045 ms 4184 KB Time limit exceeded
8 Halted 0 ms 0 KB -