# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
23201 | model_code | Drzava (COCI15_drzava) | C++11 | 1000 ms | 12168 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <vector>
#include <cmath>
using namespace std;
using llint = long long;
#define TRACE(x) cout << #x << " = " << x << endl
#define _ << " _ " <<
const int MAXN = 50010;
const int MAXK = 35;
int n, k, cookie;
int bio[MAXN];
vector<int> e[MAXN], val;
struct point {
int x, y, cnt;
point (int _x = 0, int _y = 0, int _cnt = 0) {
x = _x;
y = _y;
cnt = _cnt;
}
friend bool operator < (const point& a, const point& b) {
return a.x < b.x;
}
} p[MAXN];
struct cmpf {
bool operator()(const int& i, const int& j) {
if (p[i].y != p[j].y) return p[i].y < p[j].y;
return i > j;
}
};
set<int, cmpf> s;
bool ok[MAXN][MAXK];
inline int modulo (int x) { return x >= k ? x - k : x; }
inline llint sqr(int x) { return (llint)x * x; }
inline llint dist(int i, int j) {
return sqr(p[i].x - p[j].x) + sqr(p[i].y - p[j].y);
}
bool findSubset(const vector<int>& vec) {
int m = vec.size();
if (m > k) return true;
for (int mod = 0; mod < k; ++mod)
ok[m][mod] = !mod;
for (int i = m - 1; i >= 0; --i) {
for (int mod = 0; mod < k; ++mod) {
ok[i][mod] = ok[i + 1][mod];
if (ok[i + 1][modulo(mod + vec[i])])
ok[i][mod] = true;
}
if (ok[i + 1][vec[i]])
return true;
}
return false;
}
void dfs(int x) {
bio[x] = cookie;
val.push_back(p[x].cnt);
for (int y : e[x])
if (bio[y] != cookie)
dfs(y);
}
bool check(llint d) {
int dsqrt = (double)(sqrt(d) + 1);
for (int i = 0; i < n; ++i) {
e[i].clear();
}
s.clear();
int j = 0;
for (int i = 0; i < n; ++i) {
for (; p[i].x - p[j].x > d; ++j)
s.erase(j);
if (!s.empty()) {
int inbox = 0;
p[n] = point(p[i].x, p[i].y - dsqrt, 0);
for (auto it = s.lower_bound(n); it != s.end(); ++it) {
int idx = *it;
if (p[idx].y > p[i].y + dsqrt) break;
++inbox;
if (inbox >= 8 * k) {
return true;
}
if (dist(i, idx) <= d) {
e[i].push_back(idx);
e[idx].push_back(i);
}
}
}
s.insert(i);
}
++cookie;
for (int i = 0; i < n; ++i)
if (bio[i] != cookie) {
val.clear();
dfs(i);
if (findSubset(val)) {
return true;
}
}
return false;
}
void init(void) {
scanf("%d %d",&n,&k);
for (int i = 0; i < n; ++i) {
scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].cnt);
p[i].cnt %= k;
}
sort(p, p + n);
}
void solve(void) {
llint lo = 0, hi = 1e18, res = -1;
while (lo <= hi) {
llint mid = (lo + hi) / 2;
if (check(mid)) {
res = mid;
hi = mid - 1;
} else {
lo = mid + 1;
}
}
if (res == -1)
printf("No solution!\n");
else
printf("%.3lf\n",sqrt(res));
}
int main(void) {
init();
solve();
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | 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... |