Submission #1137516

#TimeUsernameProblemLanguageResultExecution timeMemory
1137516Faisal_SaqibNaval battle (CEOI24_battle)C++20
0 / 100
3 ms328 KiB
//
// Created by faisal-saqib on 10:22 AM 1/20/25.
//
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int N=5e3+10;
struct  {
	int x,y;
	char d;
} ship[N];
int main() {
	int n;
	cin>>n;
	for(int i=0;i<n;i++) {
		cin>>ship[i].x>>ship[i].y>>ship[i].d;
		// ship[i].x=1e9-ship[i].x;
		// ship[i].y=1e9-ship[i].y;
	}
	vector<vector<int>> col;
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			// if(i==j)continue;

			if (ship[i].d == 'N' && ship[j].d == 'S') {
				if (ship[i].x == ship[j].x && ship[i].y > ship[j].y) {
					int time = (ship[i].y - ship[j].y) / 2;
					if ((ship[i].y - ship[j].y) % 2 == 0) {
						col.push_back({time, i, j});
					}
				}
			} else if (ship[i].d == 'S' && ship[j].d == 'N') {
				if (ship[i].x == ship[j].x && ship[i].y < ship[j].y) {
					int time = (ship[j].y - ship[i].y) / 2;
					if ((ship[j].y - ship[i].y) % 2 == 0) {
						col.push_back({time, i, j});
					}
				}
			} else if (ship[i].d == 'E' && ship[j].d == 'W') {
				if (ship[i].y == ship[j].y && ship[i].x > ship[j].x) {
					int time = (ship[i].x - ship[j].x) / 2;
					if ((ship[i].x - ship[j].x) % 2 == 0) {
						col.push_back({time, i, j});
					}
				}
			} else if (ship[i].d == 'W' && ship[j].d == 'E') {
				if (ship[i].y == ship[j].y && ship[i].x < ship[j].x) {
					int time = (ship[j].x - ship[i].x) / 2;
					if ((ship[j].x - ship[i].x) % 2 == 0) {
						col.push_back({time, i, j});
					}
				}
			} else if (ship[i].d == 'N' && ship[j].d == 'E') {
				int dx = ship[j].x - ship[i].x;
				int dy = ship[i].y - ship[j].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'E' && ship[j].d == 'N') {
				int dx = ship[i].x - ship[j].x;
				int dy = ship[j].y - ship[i].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'S' && ship[j].d == 'W') {
				int dx = ship[i].x - ship[j].x;
				int dy = ship[j].y - ship[i].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'W' && ship[j].d == 'S') {
				int dx = ship[j].x - ship[i].x;
				int dy = ship[i].y - ship[j].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} //poipopoji
			else if (ship[i].d == 'N' && ship[j].d == 'W') {
				int dx = ship[i].x - ship[j].x;
				int dy = ship[i].y - ship[j].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'W' && ship[j].d == 'N') {
				int dx = ship[j].x - ship[i].x;
				int dy = ship[j].y - ship[i].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'S' && ship[j].d == 'E') {
				int dx = ship[i].x - ship[j].x;
				int dy = ship[j].y - ship[i].y;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			} else if (ship[i].d == 'E' && ship[j].d == 'S') {
				int dx = ship[j].x - ship[i].x;
				int dy = ship[i].y - ship[j].y;
				// cout<<"Hola "<<i<<' '<<j<<' '<<dx<<' '<<dy<<endl;
				if (dx > 0 && dy > 0 && dx == dy) {
					col.push_back({dx, i, j});
				}
			}
		}
	}
	sort(begin(col),end(col));
	// cout<<"ALL collisions:"<<endl;
	// for (auto it:col) {
	// 	cout<<it[0]<<' '<<it[1]<<' '<<it[2]<<endl;
	// }
	// cout<<endl;
	bool alive[n+1]={1};
	for (int i=0;i<n;i++)alive[i]=1;
	for(int i=0;i<col.size();) {
		vector<int> dead;
		int c=0;
		for (int j=i;j<col.size() and col[j][0]==col[i][0];j++) {
			// cout<<"Collision "<<col[i][0]<<' '<<col[i][1]<<' '<<col[i][2]<<endl;
			if (alive[col[j][1]] && alive[col[j][2]]) {
				dead.push_back(col[j][1]);
				dead.push_back(col[j][2]);
			}
			c++;
		}
		for (int j=0;j<dead.size();j++)alive[dead[j]]=0;
		i+=c;
	}
	vector<int> left;
	for (int i=0;i<n;i++)if(alive[i])left.push_back(i);
	for (int i=0;i<left.size();i++)cout<<left[i]+1<<endl;
}
#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...