Submission #1018864

# Submission time Handle Problem Language Result Execution time Memory
1018864 2024-07-10T10:21:22 Z parsadox2 Towns (IOI15_towns) C++17
13 / 100
10 ms 1116 KB
#include "towns.h"
#include <bits/stdc++.h>
 
#define F first
#define S second
 
using namespace std;
 
const int N = 1e2 + 20;
int n , dis[N][N] , r[N] , L[N] , R[N] , cnt[N];
 
bool Solve(int D)
{
	int lef = 0 , rig = 0 , mid = 0;
	for(int x = 0 ; x < n ; x++)
		cnt[x] = 0;
	vector <int> vec;
	int mx = -1 , cnt = 0;
	for(int x = 0 ; x < n ; x++)
	{
		if(L[x] < D)
			lef++;
		else if(L[x] > D)
			rig++;
		else
		{
			if(cnt == 0)
			{
				cnt = 1;
				mx = x;
				continue;
			}
			else
			{
				dis[mx][x] = dis[x][mx] = getDistance(x , mx);
				if(dis[x][mx] != r[x] + r[mx])
					cnt++;
				else
					cnt--;
			}
		}
	}
	mid = 1;
	for(int x = 0 ; x < n ; x++)  if(L[x] == D && x != mx)
	{
		dis[x][mx] = dis[mx][x] = getDistance(x , mx);
		if(dis[x][mx] != r[x] + r[mx])
			mid++;
	}
	return (lef <= n / 2 && rig <= n/2 && mid <= n / 2);
}
 
int hubDistance(int nn , int sub) {
	n = nn;
	pair <int , int> D = make_pair(0 , 1);
	for(int i = 1 ; i < n ; i++)
	{
		dis[0][i] = dis[i][0] = getDistance(0 , i);
		if(dis[0][i] > dis[D.F][D.S])
			D = make_pair(0 , i);
	}
	for(int i = 0 ; i < n ; i++)  if(i != D.S)
	{
		dis[i][D.S] = dis[D.S][i] = getDistance(i , D.S);
		if(dis[i][D.S] > dis[D.F][D.S])
			D = make_pair(i , D.S);
	}
	int ans = dis[D.F][D.S];
	for(int x = 0 ; x < n ; x++)
	{
		dis[x][D.F] = dis[D.F][x] = getDistance(x , D.F);
		r[x] = (dis[x][D.F] + dis[x][D.S] - dis[D.F][D.S]) / 2;
		L[x] = dis[x][D.F] - r[x];
		R[x] = dis[x][D.S] - r[x];
		//cout << x << " : " << L[x] << " " << R[x] << endl;
		ans = min(ans , max(L[x] , R[x]));
	}
	ans = -ans;
	set <int> st;
	for(int x = 0 ; x < n ; x++)  if(L[x] == abs(ans) || R[x] == abs(ans))
	{
		st.insert(L[x]);
	}
	if(st.size() == 2)
	{
		int lef = 0 , rig = 0;
		for(int i = 0 ; i < n ; i++)
		{
			if(L[i] <= abs(ans))
				lef++;
			else
				rig++;
		}
		if(lef > n / 2)
		{
			auto it = st.end();  it--;
			st.erase(it);
		}
		else if(rig > n / 2)
		{
			st.erase(st.begin());
		}
		else
		{
			return abs(ans);
		}
	}
	int ch = *st.begin();
	if(Solve(ch))
		ans = abs(ans);
	return ans;
}

Compilation message

towns.cpp: In function 'bool Solve(int)':
towns.cpp:18:16: warning: declaration of 'cnt' shadows a global declaration [-Wshadow]
   18 |  int mx = -1 , cnt = 0;
      |                ^~~
towns.cpp:10:42: note: shadowed declaration is here
   10 | int n , dis[N][N] , r[N] , L[N] , R[N] , cnt[N];
      |                                          ^~~
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:53:30: warning: unused parameter 'sub' [-Wunused-parameter]
   53 | int hubDistance(int nn , int sub) {
      |                          ~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 8 ms 1116 KB Output is correct
2 Correct 7 ms 860 KB Output is correct
3 Correct 0 ms 600 KB Output is correct
4 Correct 10 ms 952 KB Output is correct
5 Correct 10 ms 860 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 7 ms 860 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -