제출 #1173245

#제출 시각아이디문제언어결과실행 시간메모리
1173245nuutsnoyntonDrzava (COCI15_drzava)C++20
32 / 160
1097 ms1880 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;
const ll N = 5e4 + 2;
ll x[N], y[N], c[N];
ll ataman[N], k, n;

ll Get(ll x) {
	if ( x == ataman[x]) return x;
	return ataman[x] = Get(ataman[x]);
}

void Unite(ll x, ll y) {
	x = Get(x);
	y = Get(y);
	if ( x == y) return ;
	if ( x > y) swap(x, y);
	ataman[y] = x;
	return ;
}

bool Can(double R) {
	double S, K = R * R;
	ll i, j, r, cur;
	for (i = 1; i <= n; i ++) ataman[i] = i;
	for (i = 1; i <= n; i ++) {
		for (j = i + 1; j <= n; j ++) {
			S =(x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j] ) * (y[i] - y[j]);
			if ( S <= K) {
				Unite(i, j);
			}
		}
	}
	vector < ll > v[n + 2];
	for (i = 1; i <= n; i ++) {
//		cout << Get(i) << " ";
		v[Get(i)].push_back(i);
	}
//	cout << "\n";
	for (i = 1; i <= n; i ++) {
		ll A[3][32] = {0};
		A[0][0] = 1;
		cur = 0;
		for (j = 0; j < v[i].size();  j ++) {
		//	cout << c[v[i][j]] << " ";
			for ( r = 0; r < k; r ++) A[1 - cur][r] = 0;
			for ( r = 0; r < k; r ++) {
				A[1 - cur][(r + c[v[i][j]]) % k]  += A[cur][r];
				A[1 - cur][r]  += A[cur][r];
			}
			cur = 1 - cur;
		}
		if ( A[cur][0] > 1) return true;
	}
	return false;
	
}

int main() {
	ll i;

	cin >> n >> k;
	
	for (i = 1; i <= n; i ++) {
		cin >> x[i] >> y[i] >> c[i];
		c[i] %= k;
	}
	
	double lo , mid , hi;
	
	lo = 0;
	hi = 2e9;
//	cout << Can(2) << endl;
	while ( hi - lo > 0.0000001) {
		mid = (lo+ hi)/2;
		if (!Can(mid)) lo = mid + 0.000000001;
		else hi = mid;
	}
	printf("%.3lf", lo);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...