Submission #1315327

#TimeUsernameProblemLanguageResultExecution timeMemory
1315327djsksbrbfNaval battle (CEOI24_battle)C++20
30 / 100
119 ms29324 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll, ll> pii;
#define fi first
#define se second
#define pb push_back
const int MOD = 1e9 + 7;
const int MAX = 2e5 + 5;

signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	vector <pair<pii, int>> v;
	int n; cin >> n;
	map <int, set<pii>> mp;
	for(int i = 1 ; i  <= n ; i++){
		int x, y; cin >> x >> y;
		char c; cin >> c;
		
		if(c == 'S'){
			mp[x + y].insert({x, i});
		}
		else{
			v.pb({{x, y}, i});
		}
	}
	
	sort(v.begin(), v.end(), [&](pair <pii, int> x, pair<pii, int>y){
		int sx = x.fi.fi + x.fi.se;
		int sy=  y.fi.fi + y.fi.se;
		
		if(sx == sy){
			return x.fi.fi > y.fi.fi;
		}
		return sx < sy;
	});
	
	bool dead[n + 5];memset(dead, 0, sizeof(dead));
	for(int i = 0 ; i < (int)v.size() ; i++){
		int x = v[i].fi.fi;
		int y = v[i].fi.se;
		int id = v[i].se;
		
		auto oth = mp[x + y].upper_bound({x, 0});
		if(oth == mp[x + y].end())continue;
		
		dead[id] = dead[(*oth).se] = 1;
		mp[x + y].erase(oth);
	}
	
	for(int i = 1 ; i <= n ; i++){
		if(!dead[i])cout << i << '\n';
	}
	
	return 0;
}
#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...