Submission #64008

# Submission time Handle Problem Language Result Execution time Memory
64008 2018-08-03T08:17:02 Z 끄흐수(#2146) Park (BOI16_park) C++11
0 / 100
889 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 {
	int a, b;
	ll 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(int j=5;j<i;j++) {
			ll T = ceil(hypot(x[i]-x[j], y[i]-y[j]))-r[i]-r[j];
			act.push_back({i, j, T});
		}
		act.push_back({i, 1, y[i]-r[i]});
		act.push_back({i, 2, w-x[i]-r[i]});
		act.push_back({i, 3, h-y[i]-r[i]});
		act.push_back({i, 4, x[i]-r[i]});
	}
	act.push_back({1, 1, inf});
	for(int i=1;i<=m;i++) {
		event T;
		scanf("%lld%d",&T.c,&T.b);
		T.c *= 2;
		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++) {
			ll 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(T.a)] = Find(T.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:33: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:36: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:49:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%d",&T.c,&T.b);
   ~~~~~^~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 423 ms 33436 KB Output is correct
2 Correct 429 ms 33460 KB Output is correct
3 Correct 451 ms 33460 KB Output is correct
4 Correct 406 ms 33508 KB Output is correct
5 Correct 439 ms 33648 KB Output is correct
6 Correct 473 ms 33648 KB Output is correct
7 Correct 405 ms 33648 KB Output is correct
8 Incorrect 390 ms 33648 KB Output isn't correct
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 889 ms 263168 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 423 ms 33436 KB Output is correct
2 Correct 429 ms 33460 KB Output is correct
3 Correct 451 ms 33460 KB Output is correct
4 Correct 406 ms 33508 KB Output is correct
5 Correct 439 ms 33648 KB Output is correct
6 Correct 473 ms 33648 KB Output is correct
7 Correct 405 ms 33648 KB Output is correct
8 Incorrect 390 ms 33648 KB Output isn't correct
9 Halted 0 ms 0 KB -