# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
525139 | ali22413836 | Countries (BOI06_countries) | C++14 | 9 ms | 6816 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#define endl "\n"
using namespace std ;
typedef long long ll;
typedef long double ld ;
const int N=2e7;
const ll inf=1e18 ;
const ll mod = 1e9 + 7 ;
ll mypower(ll x, ll y){
if(y == 0) return 1 ;
if(y == 1) return x ;
ll ret = mypower(x , y / 2);
ret = (ret * ret) % mod;
if(y % 2) ret = ( ret * x ) % mod ;
return ret ;
}
ll n , x[20000] , y[200009] , s[200009] , in[200009] , ans[2000009] ;
vector < ll > v[200009] ;
bool cmp(ll x , ll y){
return s[x] > s[y] ;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n ;
for(int i = 0 ; i < n ; i++){
cin >> x[i] >> y[i] >> s[i] ;
in[i] = i ;
}
sort(in , in + n , cmp) ;
for(int i = 0 ; i < n ; i++){
// cout << in[i] << endl ;
for(int j = 0; j < n ; j++){
if(in[i] == in[j])
continue ;
ll q = (x[in[i]] - x[in[j]]) * (x[in[i]] - x[in[j]]) + (y[in[i]] - y[in[j]]) * (y[in[i]] - y[in[j]]) ;
if(s[in[j]] > s[in[i]] * q){
v[in[i]].push_back(in[j]) ;
}
}
// for(auto p : v[in[i]]){
// cout << p << " " ;
// }
// cout << endl ;
if(v[in[i]].size() == 0){
ans[in[i]] = 0 ;
continue ;
}
ll ind = v[in[i]][0] ;
bool is = 0 ;
for(auto p : v[in[i]]){
if(p == ind)
continue ;
ll dis1 = (x[in[i]] - x[p]) * (x[in[i]] - x[p]) + (y[in[i]] - y[p]) * (y[in[i]] - y[p]) ;
ll dis2 = (x[in[i]] - x[ind]) * (x[in[i]] - x[ind]) + (y[in[i]] - y[ind]) * (y[in[i]] - y[ind]) ;
ll q = dis1 * s[ind] ;
ll q2 = dis2 * s[p] ;
// cout << q << " " << q2 << endl ;
if(q == q2){
is = 1 ;
}
if(q > q2){
ind = p ;
is = 0 ;
}
}
// cout << "ind is " << ind << endl ;
if(is){
ans[in[i]] = -1 ;
continue ;
}
else{
if(ans[ind] == 0)
ans[in[i]] = ind + 1 ;
else{
ans[in[i]] = ans[ind] ;
}
}
}
for(int i = 0 ; i < n ; i++){
if(ans[i] == 0){
cout << "K" << endl ;
}
else if(ans[i] == -1){
cout << "D" << endl ;
}
else{
cout << ans[i] <<endl ;
}
}
return 0 ;
}
/*
5
2 5 14
2 3 2
3 2 7
1 1 2
2 1 3
*/
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |