Submission #1052792

#TimeUsernameProblemLanguageResultExecution timeMemory
1052792beaconmcNaval battle (CEOI24_battle)C++14
46 / 100
3076 ms409040 KiB
#include <bits/stdc++.h>
 
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)

using namespace std;
vector<vector<ll>> stuff;
vector<vector<ll>> collisions;
int main(){
	ll n; cin >> n;

	FOR(i,0,n){
		ll x,y;
		cin >> x >> y;
		char s;
		cin >> s;
		stuff.push_back({x,y,s, i});
	}
	FOR(i,0,n){
		FOR(j,i+1,n){
			ll time1, time2;
			set<ll> up = {'S','N'};
			set<ll> left = {'E','W'};

			if (up.count(stuff[i][2]) && up.count(stuff[j][2]) && stuff[i][0] != stuff[j][0]) continue;
			if (left.count(stuff[i][2]) && left.count(stuff[j][2]) && stuff[i][1] != stuff[j][1]) continue;

			if (stuff[i][2] == 'S'){
				time1 = stuff[i][1] - stuff[j][1];
			}
			if (stuff[i][2] == 'N'){
				time1 = stuff[j][1] - stuff[i][1];
			}
			if (stuff[i][2] == 'E'){
				time1 = stuff[i][0] - stuff[j][0];
			}
			if (stuff[i][2] == 'W'){
				time1 = stuff[j][0] - stuff[i][0];
			}
			if (stuff[j][2] == 'S'){
				time2 = stuff[j][1] - stuff[i][1];
			}
			if (stuff[j][2] == 'N'){
				time2 = stuff[i][1] - stuff[j][1];
			}
			if (stuff[j][2] == 'E'){
				time2 = stuff[j][0] - stuff[i][0];
			}
			if (stuff[j][2] == 'W'){
				time2 = stuff[i][0] - stuff[j][0];
			}


			if (time1 < 0 && time1==time2){
				if (up.count(stuff[i][2]) && up.count(stuff[j][2])) time1 /= 2;
				if (left.count(stuff[i][2]) && left.count(stuff[j][2])) time1 /= 2;

				collisions.push_back({-time1,i+1, j+1});
			}
		}
	}
	sort(collisions.begin(), collisions.end());
	reverse(collisions.begin(), collisions.end());
	set<ll> destroyed;
	set<ll> times;
	for (auto&i : collisions) times.insert(i[0]);
	ll cur;
	for (auto&i : times){
		vector<ll> temp;
		while (collisions.size() && collisions[collisions.size()-1][0] == i){
			if (!(destroyed.count(collisions[collisions.size()-1][1]) || destroyed.count(collisions[collisions.size()-1][2]))){
				temp.push_back(collisions[collisions.size()-1][1]);
				temp.push_back(collisions[collisions.size()-1][2]);
			}
			collisions.pop_back();
		}

		for (auto&i : temp) destroyed.insert(i);
	}

	FOR(i,1,n+1) if (destroyed.count(i) == 0) cout << i << endl;


}
















Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:68:5: warning: unused variable 'cur' [-Wunused-variable]
   68 |  ll cur;
      |     ^~~
Main.cpp:55:26: warning: 'time2' may be used uninitialized in this function [-Wmaybe-uninitialized]
   55 |    if (time1 < 0 && time1==time2){
      |                     ~~~~~^~~~~~~
Main.cpp:56:63: warning: 'time1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   56 |     if (up.count(stuff[i][2]) && up.count(stuff[j][2])) time1 /= 2;
      |                                                         ~~~~~~^~~~
#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...