제출 #1137503

#제출 시각아이디문제언어결과실행 시간메모리
1137503Jawad_Akbar_JJNaval battle (CEOI24_battle)C++20
46 / 100
3131 ms965912 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];

	fun(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...