This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <cmath>
#include <cassert>
#include <set>
#include <algorithm>
#define let const auto
#define rep(name,beg,end) for(auto lim_##name = end,name = beg;name <= lim_##name;name++)
#define per(name,beg,end) for(auto lim_##name = end,name = beg;name >= lim_##name;name--)
#define repn(lim) for(auto REPN_LIM = lim,REPN = 1;REPN <= REPN_LIM;REPN++)
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define trace() debug("Line : %d, Function : %s\n",__LINE__,__FUNCTION__)
using ll = long long;
constexpr int maxn = 5e4 + 10;
constexpr ll sq(const ll x){return x * x;}
int n,k,v[maxn],now[maxn];
namespace dsu{
int f[maxn];
void init(){rep(i,1,n)f[i] = i;}
int find(const int x){return x == f[x] ? x : f[x] = find(f[x]);}
void merge(const int x,const int y){f[find(x)] = find(y);}
}
struct Point{
int x,y,id;
}val[maxn];
bool chk(const ll lim){
dsu::init();
let cmp = [](const Point &a,const Point &b){
if(a.y != b.y)return a.y < b.y;
return a.x < b.x;
};
std::multiset<Point,decltype(cmp)> s(cmp);
for(int l = 1,r = 1;r <= n;r++){
s.insert(val[r]);
while(sq(val[r].x - val[l].x) > lim)s.erase(val[l++]);
auto itl = s.lower_bound(val[r]),itr = s.lower_bound(val[r]);
while(itr != s.end() && sq(val[r].y - itr->y) <= lim)itr++;
while(itl != s.begin() && sq(val[r].y - std::prev(itl)->y) <= lim)itl--;
s.erase(s.begin(),itl);
s.erase(itr,s.end());
if((int)s.size() > 8 * k)return true;
for(let x : s){
if(sq(x.x - val[r].x) + sq(x.y - val[r].y) <= lim)
dsu::merge(val[r].id,x.id);
}
}
std::fill(now + 1,now + 1 + n,0);
rep(i,1,n){
let f = dsu::find(i);
ll tmp = (now[f] << v[i]);
tmp |= (tmp >> k);
tmp &= (1 << k) - 1;
now[f] |= tmp;
now[f] |= 1 << v[i];
if(now[f] & 1)return true;
}
return false;
}
int main(){
#ifndef ONLINE_JUDGE
std::freopen("fufu.in","r",stdin);
#endif
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> k;
rep(i,1,n)std::cin >> val[i].x >> val[i].y >> v[i],val[i].id = i;
std::sort(val + 1,val + 1 + n,[](const Point &a,const Point &b){
if(a.x != b.x)return a.x < b.x;
return a.y < b.y;
});
ll l = 0,r = 1e16,ans = -1;
while(l <= r){
let mid = (l + r) >> 1;
if(chk(mid))ans = mid,r = mid - 1;
else l = mid + 1;
}
assert(ans != -1);
std::printf("%.3lf\n",double(std::sqrt(ans)));
return 0;
}
Compilation message (stderr)
drzava.cpp: In function 'int main()':
drzava.cpp:65:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
65 | std::freopen("fufu.in","r",stdin);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |