Submission #71674

# Submission time Handle Problem Language Result Execution time Memory
71674 2018-08-25T10:55:12 Z mr_banana Towns (IOI15_towns) C++17
48 / 100
42 ms 1824 KB
#include <bits/stdc++.h>
#include "towns.h"
using namespace std;
const int MN=200,inf=1e9;
int dist[MN][MN];
bool mark[MN][MN];
map<int,int> cnt;
map<int,vector<int> > v1;
int n;
int getdists(int x){
    int mi=0;
    for(int i=0;i<n;i++){
        if(x!=i && !mark[x][i]){
            dist[x][i]=dist[i][x]=getDistance(x,i);
            mark[x][i]=mark[i][x]=1;
        }
        if(dist[x][i]>dist[x][mi]){
            mi=i;
        }
    }
    return mi;
}
int hubDistance(int N, int sub) {
    cnt.clear();
    v1.clear();
    memset(mark,0,sizeof mark);
    memset(dist,0,sizeof dist);
    n=N;
    int u=getdists(0);
    int v=getdists(u);
    getdists(v);
    int ans=inf;
    for(int i=0;i<n;i++){
        int d=(dist[i][v]+dist[i][u]-dist[u][v])/2;
        cnt[dist[i][v]-d]++;
        v1[dist[i][v]-d].push_back(i);
        ans=min(ans,max(dist[i][v],dist[i][u])-d);
    }
    int n1=0,n2=n;
    bool f=0;
    if(sub==4){
        for(auto i:cnt){
            n2-=i.second;
            if(max(i.first,dist[u][v]-i.first)==ans && n1<=n/2 && n2<=n/2 && i.second<=n/2){
                f=1;
            }
            n1+=i.second;
        }
    }
    if(sub==3){
        for(int i=0;i<n;i++){
            getdists(i);
        }
        for(auto i:v1){
            n2-=i.second.size();
            bool f1=1;
            if(max(i.first,dist[u][v]-i.first)==ans){
                for(int j:i.second){
                    int d1=(dist[v][j]+dist[u][j]-dist[u][v])/2;
                    int cnt1=0;
                    for(int k:i.second){
                        int d2=(dist[u][k]+dist[v][k]-dist[u][v])/2;
                        if(dist[j][k]!=d1+d2){
                            cnt1++;
                        }
                    }
                    if(cnt1>n/2){
                        f1=0;
                    }
                }
                if(f1 && n1<=n/2 && n2<=n/2){
                    f=1;
                }
            }
            n1+=i.second.size();
        }
    }
    if(!f && sub>2){
        return -ans;
    }
    else{
        return ans;
    }
}

Compilation message

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:55:31: warning: conversion to 'int' from 'std::vector<int>::size_type {aka long unsigned int}' may alter its value [-Wconversion]
             n2-=i.second.size();
                               ^
towns.cpp:75:31: warning: conversion to 'int' from 'std::vector<int>::size_type {aka long unsigned int}' may alter its value [-Wconversion]
             n1+=i.second.size();
                               ^
# Verdict Execution time Memory Grader output
1 Correct 27 ms 632 KB Output is correct
2 Correct 22 ms 768 KB Output is correct
3 Correct 2 ms 768 KB Output is correct
4 Correct 37 ms 896 KB Output is correct
5 Correct 23 ms 896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 23 ms 896 KB Output is correct
2 Correct 21 ms 896 KB Output is correct
3 Correct 26 ms 896 KB Output is correct
4 Correct 26 ms 896 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 25 ms 896 KB Output is correct
2 Correct 27 ms 1316 KB Output is correct
3 Correct 2 ms 1316 KB Output is correct
4 Correct 27 ms 1796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 42 ms 1820 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 18 ms 1824 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 1824 KB Output isn't correct
2 Halted 0 ms 0 KB -