Submission #1137510

#TimeUsernameProblemLanguageResultExecution timeMemory
1137510Jawad_Akbar_JJNaval battle (CEOI24_battle)C++20
76 / 100
361 ms48028 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int N = 3e5;
vector<pair<int,int>> Vec[N];
int x[N], y[N], xa[N], ya[N], er[N];

char dir[N];

pair<int,int> nxt(int i, int d){
	return {x[i] + d * xa[dir[i]], y[i] + d * ya[dir[i]]};
}

void fun(int n){
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			int d = abs(x[i] - x[j]) + abs(y[i] - y[j]);
			if (d != 0 and nxt(i, d / 2) == nxt(j, d / 2))
				Vec[i].push_back({d / 2, j});
		}
	}

	for (int i=1;i<=n;i++)
		sort(rbegin(Vec[i]), rend(Vec[i]));

	for (int i=1;i<=n;i++){
		int mn = 2.1e9, cnt = 1;

		for (int j=1;j<=n;j++){
			while (Vec[j].size() >= 1 and er[Vec[j].back().second]) Vec[j].pop_back();
			if (Vec[j].size() >= 1 and Vec[j].back().first < mn)
				mn = Vec[j].back().first, cnt = 1;
			else if (Vec[j].size() >= 1 and Vec[j].back().first == mn)
				cnt++;
		}

		if (cnt == 1) break;

		for (int j=1;j<=n;j++)
			if (Vec[j].size() >= 1 and Vec[j].back().first == mn)
				er[j] = 1, Vec[j].clear();
	}

	for (int i=1;i<=n;i++)
		if (!er[i])
			cout<<i<<'\n';
	exit(0);
}

int main(){
	xa['E'] = ya['S'] = 1;
	xa['W'] = ya['N'] = -1;

	int n;
	cin>>n;

	for (int i=1;i<=n;i++)
		cin>>x[i]>>y[i]>>dir[i];

	if (n <= 5000) fun(n);

	vector<pair<int,pair<int,int>>> vec;
	for (int i=1;i<=n;i++)
		vec.push_back({x[i] + y[i], {x[i], i}});
	sort(begin(vec), end(vec));

	int prv = -1;
	vector<int> Prv;
	for (auto [xpy, p] : vec){
		if (xpy != prv){
			for (int i : Prv) cout<<i<<'\n';
			Prv.clear();
		}

		int ind = p.second;
		if (dir[p.second] == 'E') Prv.push_back(ind);
		else if (Prv.size() > 0) Prv.pop_back();
		else cout<<ind<<'\n';
		prv = xpy;
	}
	for (int i : Prv) cout<<i<<'\n';

}
#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...