# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
63986 |
2018-08-03T08:02:40 Z |
끄흐수(#2146) |
Park (BOI16_park) |
C++11 |
|
868 ms |
263168 KB |
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 2018, inf = 1e18;
const ll CA[6] = {1, 1, 1, 2, 2, 3};
const ll CB[6] = {2, 3, 4, 3, 4, 4};
const ll CC[6] = {2, 6, 1, 4, 3, 7};
ll n, m, w, h, x[N], y[N], r[N], p[N], ans[N];
struct event {
ll a, b, c;
bool operator < (event &T) {
return (c < T.c);
}
};
vector<event> act, qry;
int Find (int X) {
if(p[X] == X) return X;
return p[X] = Find(p[X]);
}
int getbit (int B, int C) {
return (((1<<(C-1))&B) ? B : (~B & 15));
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&w,&h);
iota(p+1, p+1+n+4, 1);
for(int i=5;i<=n+4;i++) {
scanf("%lld%lld%lld",&x[i],&y[i],&r[i]);
for(ll j=5;j<i;j++) {
ll T = (ceil(hypot(x[i]-x[j], y[i]-y[j]))-r[i]-r[j]+1)/2;
act.push_back({i, j, T});
}
act.push_back({i, 1, (y[i]-r[i]+1)/2});
act.push_back({i, 2, (w-x[i]-r[i]+1)/2});
act.push_back({i, 3, (h-y[i]-r[i]+1)/2});
act.push_back({i, 4, (x[i]-r[i]+1)/2});
}
act.push_back({1, 1, inf});
for(int i=1;i<=m;i++) {
event T;
scanf("%lld%lld",&T.c,&T.b);
T.a = i;
ans[i] = 15;
qry.push_back(T);
}
sort(act.begin(), act.end());
sort(qry.begin(), qry.end());
for(int i=0,j=0;i<(int)act.size();i++) {
auto &T = act[i];
for(;j<(int)qry.size() && qry[j].c < T.c; j++) {
int I = qry[j].a, B = qry[j].b;
for(int k=0;k<6;k++) {
if(Find(CA[k]) == Find(CB[k])) {
ans[I] &= getbit(CC[k], B);
}
}
}
p[Find(act[i].a)] = Find(act[i].b);
}
for(int i=1;i<=m;i++) {
for(int j=0;j<4;j++) {
if(ans[i] & (1<<j)) printf("%d",j+1);
}
puts("");
}
}
Compilation message
park.cpp: In function 'int main()':
park.cpp:32:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld%lld%lld%lld",&n,&m,&w,&h);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
park.cpp:35:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld%lld%lld",&x[i],&y[i],&r[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
park.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%lld%lld",&T.c,&T.b);
~~~~~^~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
457 ms |
49836 KB |
Output is correct |
2 |
Correct |
473 ms |
49948 KB |
Output is correct |
3 |
Correct |
413 ms |
50056 KB |
Output is correct |
4 |
Correct |
414 ms |
50056 KB |
Output is correct |
5 |
Correct |
470 ms |
50056 KB |
Output is correct |
6 |
Correct |
506 ms |
50056 KB |
Output is correct |
7 |
Correct |
377 ms |
50056 KB |
Output is correct |
8 |
Incorrect |
352 ms |
50056 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
868 ms |
263168 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
457 ms |
49836 KB |
Output is correct |
2 |
Correct |
473 ms |
49948 KB |
Output is correct |
3 |
Correct |
413 ms |
50056 KB |
Output is correct |
4 |
Correct |
414 ms |
50056 KB |
Output is correct |
5 |
Correct |
470 ms |
50056 KB |
Output is correct |
6 |
Correct |
506 ms |
50056 KB |
Output is correct |
7 |
Correct |
377 ms |
50056 KB |
Output is correct |
8 |
Incorrect |
352 ms |
50056 KB |
Output isn't correct |
9 |
Halted |
0 ms |
0 KB |
- |