Submission #1096232

#TimeUsernameProblemLanguageResultExecution timeMemory
1096232MMihalevTowns (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];
set<int>nodes,nodes1,nodes2;
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,cntbaseneg=0,cntbasepos=0;
    int mindif=1e9;

    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)
        {
            if(res<=0){cntbaseneg++;nodes1.insert(i);}
            else {cntbasepos++;nodes2.insert(i);}
        }
        else if(res<0)cntneg++;
        else cntpos++;
    }

    int R=(diam-mindif)/2+mindif;

    if(cntbaseneg*cntbasepos!=0)while(1);

    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(nodes.size())
    {
        int cnt=1;
        int uu=(*(nodes.begin()));
        nodes.erase(uu);
        if(nodes.size()==0)break;

        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: In function 'int hubDistance(int, int)':
towns.cpp:110:9: error: expected '}' before 'else'
  110 |         else R*=-1;
      |         ^~~~
towns.cpp:108:5: note: to match this '{'
  108 |     {
      |     ^
towns.cpp: At global scope:
towns.cpp:115:5: error: expected unqualified-id before 'if'
  115 |     if(cntneg*2>n or cntpos*2>n)return -R;
      |     ^~
towns.cpp:117:5: error: expected unqualified-id before 'while'
  117 |     while(nodes.size())
      |     ^~~~~
towns.cpp:138:2: error: expected unqualified-id before 'return'
  138 |  return R;
      |  ^~~~~~
towns.cpp:139:1: error: expected declaration before '}' token
  139 | }
      | ^