Submission #1095743

#TimeUsernameProblemLanguageResultExecution timeMemory
1095743MMihalevTowns (IOI15_towns)C++17
Compilation error
0 ms0 KiB

#include "towns.h"
#include<iostream>
#include<algorithm>
#include<set>
#include<cmath>
using namespace std;
const int MAX_N=2e2+2;
int diam;
int tov[MAX_N];
int tou[MAX_N];
int to0[MAX_N];
int n;
bool check(int a,int b)
{
    if(tou[a]+tov[b]-diam==getDistance(a,b))return 0;
    return 1;
}
int hubDistance(int N, int sub)
{
    n=N;
 
    int u=0;
    int far=0,v;
    for(int i=1;i<n;i++)
    {
        int cur=getDistance(u,i);
        to0[i]=cur;
        if(cur>far)
        {
            far=cur;
            v=i;
        }
    }//0->v
 
    diam=0;
    for(int i=0;i<n;i++)
    {
        if(i==v)continue;
        int cur;
        if(i==0)cur=to0[v];
        else cur=getDistance(i,v);
 
        tov[i]=cur;
 
        if(cur>diam)
        {
            diam=cur;
            u=i;
        }
    }//v->u
 
    for(int i=0;i<n;i++)
    {
        if(i==u)continue;
        if(i==0)tou[i]=to0[u];
        if(i==v)tou[i]=tov[u];
        tou[i]=getDistance(u,i);
    }//u->all
 
 
    int cntneg=1,cntpos=1,cntbase=0;
    int mindif=1e9;
    set<int>nodes;
    for(int i=0;i<n;i++)
    {
        if(i==u or i==v)continue;
 
        int x=tou[i];
        int y=tov[i];
        int com=((x+y)-diam)/2;
 
        x-=com;
        y-=com;
 
        int res=x-y;
 
        mindif=min(mindif,abs(res));
    }
 
    for(int i=0;i<n;i++)
    {
        if(i==u or i==v)continue;
 
        int x=tou[i];
        int y=tov[i];
        int com=((x+y)-diam)/2;
 
        x-=com;
        y-=com;
 
        int res=x-y;
 
        if(abs(res)==mindif){cntbase++;nodes.insert(i);}
        else if(res<0)cntneg++;
        else cntpos++;
    }
 
    int R=(diam-mindif)/2+mindif;
 
    if(sub==4 or sub<=2)
    {
        if(cntbase*2<=n && cntpos*2<=n && cntneg*2<=n)R*=1;
        else R*=-1;
 
        return R;
    }
 
    if(cntneg*2>n or cntpos*2>n)return -R;
 
    while(1)
    {
        int cnt=1;
        int uu=(*(nodes.begin()));
        nodes.erase(uu);
 
        auto it=nodes.begin();
        while(it!=nodes.end())
        {
            if(check(uu,(*it)))
            {
                cnt++;
                it=nodes.erase(it);
            }
            else it++;
        }
 
        if(2*cnt>n)return -R;
    }
 
	return R;
}

Compilation message (stderr)

towns.cpp:109:2: error: extended character   is not valid in an identifier
  109 |     if(cntneg*2>n or cntpos*2>n)return -R;
      |  ^
towns.cpp:109:5: error: extended character   is not valid in an identifier
  109 |     if(cntneg*2>n or cntpos*2>n)return -R;
      |    ^
towns.cpp:115:2: error: extended character   is not valid in an identifier
  115 |         nodes.erase(uu);
      |  ^
towns.cpp:115:5: error: extended character   is not valid in an identifier
  115 |         nodes.erase(uu);
      |    ^
towns.cpp:115:8: error: extended character   is not valid in an identifier
  115 |         nodes.erase(uu);
      |      ^
towns.cpp:115:11: error: extended character   is not valid in an identifier
  115 |         nodes.erase(uu);
      |        ^
towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:109:2: error: '\U000000a0' was not declared in this scope
  109 |     if(cntneg*2>n or cntpos*2>n)return -R;
      |  ^
towns.cpp:115:4: error: expected ';' before '\U000000a0'
  115 |         nodes.erase(uu);
      |   ^~
      |   ;