답안 #525156

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
525156 2022-02-10T21:40:14 Z ali22413836 Countries (BOI06_countries) C++14
100 / 100
6 ms 6816 KB
#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 ;
}
struct ali{
    ll x , y , s , ind ;
    bool operator <(ali q){
        return s > q.s ;
    }
}a[200009] ;
vector < ll > v[200009];
ll n , ans[200009] ;
int main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> n ;
    for(int i = 0 ; i < n ; i++){
        ll f , s , t ;
        cin >> f >> s >> t ;
        a[i] = {f , s , t , i} ;
    }
    sort(a , a + n) ;
    for(int i = 0 ; i < n ; i++){
//        cout << a[i].ind << endl  ;
        for(int j = 0 ; j < n ; j++){
            if(j == i)
                continue ;
            ll dis1 = (a[i].x - a[j].x) * (a[i].x - a[j].x) + (a[i].y - a[j].y) * (a[i].y - a[j].y) ;
            if(dis1 * a[i].s < a[j].s){
                v[a[i].ind].push_back(j) ;
            }
        }
        if(v[a[i].ind].size() == 0){
            ans[a[i].ind] = 0 ;
            continue ;
        }
//        for(auto p : v[a[i].ind]){
//            cout << a[p].ind << " " ;
//        }
//        cout << endl ;
        ll in = v[a[i].ind][0] ;
        bool is = 0 ;
        for(int j = 1 ; j < v[a[i].ind].size() ; j++){
            ll q = v[a[i].ind][j] ;
            ll dis1 = (a[i].x - a[q].x) * (a[i].x - a[q].x) + (a[i].y - a[q].y) * (a[i].y - a[q].y) ;
            ll dis2 = (a[i].x - a[in].x) * (a[i].x - a[in].x) + (a[i].y - a[in].y) * (a[i].y - a[in].y) ;
            if(dis1 * a[in].s == dis2 * a[q].s){
                is = 1 ;
            }
            else if(dis1 * a[in].s <= dis2 * a[q].s){
                is = 0 ;
                in = q ;
            }
        }
        if(is){
            ans[a[i].ind] = -1 ;
            continue ;
        }
        if(ans[a[in].ind] == 0){
            ans[a[i].ind] = a[in].ind + 1 ;
        }
        else{
            ans[a[i].ind] = ans[a[in].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

*/

Compilation message

countries.cpp: In function 'int main()':
countries.cpp:54:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |         for(int j = 1 ; j < v[a[i].ind].size() ; j++){
      |                         ~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 3 ms 5068 KB Output is correct
3 Correct 3 ms 5068 KB Output is correct
4 Correct 3 ms 5068 KB Output is correct
5 Correct 3 ms 4940 KB Output is correct
6 Correct 4 ms 5324 KB Output is correct
7 Correct 3 ms 5068 KB Output is correct
8 Correct 4 ms 4940 KB Output is correct
9 Correct 4 ms 5068 KB Output is correct
10 Correct 4 ms 5068 KB Output is correct
11 Correct 3 ms 4940 KB Output is correct
12 Correct 2 ms 5068 KB Output is correct
13 Correct 3 ms 4940 KB Output is correct
14 Correct 3 ms 5068 KB Output is correct
15 Correct 4 ms 4940 KB Output is correct
16 Correct 4 ms 4940 KB Output is correct
17 Correct 3 ms 4940 KB Output is correct
18 Correct 5 ms 6220 KB Output is correct
19 Correct 6 ms 6816 KB Output is correct
20 Correct 4 ms 5068 KB Output is correct