Submission #731278

#TimeUsernameProblemLanguageResultExecution timeMemory
731278lucriGondola (IOI14_gondola)C++17
Compilation error
0 ms0 KiB
#include <stdio.h>
#include <assert.h>
#include <algorithm>
#include "gondola.h"
#define MOD 1000000009


int poz[100010];
std::unordered_set<int>e;
int valid(int n, int inputSeq[])
{
    for(int i=0;i<n;++i)
    {
        if(e.find(inputSeq[i])!=e.end())
            return 0;
        e.insert(inputSeq[i]);
        if(1<=inputSeq[i]&&inputSeq[i]<=n)
            poz[inputSeq[i]]=i+1;
    }
    int dif=-1;
    for(int i=1;i<=n;++i)
        if(poz[i])
        {
            int val;
            if(i<=poz[i])
                val=poz[i]-i;
            else
                val=poz[i]+n-i;
            if(dif==-1)
                dif=val;
            else if(dif!=val)
                return 0;
        }
    return 1;
}

//----------------------

int ago[100010];

int truevalue(int val,int n)
{
  while(val<=0)
    val+=n;
  return val;
}

int goodshift(int n,int gondolaSeq[])
{
  int ls=-1;
  for(int i=0;i<n;++i)
    if(1<=gondolaSeq[i]&&gondolaSeq[i]<=n)
    {
      if(gondolaSeq[i]<=i+1)
        ls=i+1-gondolaSeq[i];
      else
        ls=i+1+n-gondolaSeq[i];
      break;
    }
  if(ls==-1)
  {
    for(int i=0;i<n;++i)
      ago[i+1]=gondolaSeq[i];
    return 0;
  }
  for(int i=0;i<n;++i)
    ago[truevalue(i+1-ls,n)]=gondolaSeq[i];
  return 1;
}

int pozval[250010],valac;

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  goodshift(n,gondolaSeq);
  for(int i=1;i<=n;++i)
    pozval[ago[i]]=i;
  valac=n;
  for(int i=1;i<=n;++i)
    ago[i]=i;
  for(int i=n+1;i<=250000;++i)
  {
    if(pozval[i]!=0)
    {
      while(valac<i)
      {
        replacementSeq[valac-n]=ago[pozval[i]];
        ++valac;
        ago[pozval[i]]=valac;
      }
    }
  }
  return valac-n;
}

//----------------------

long long ans=1;

int countReplacement(int n, int inputSeq[])
{
  if(valid(n,inputSeq)==0)
    return 0;
  std::sort(inputSeq,inputSeq+n);
  if(inputSeq[0]>n)
    ans*=n;
  int poz=0;
  while(poz<n&&inputSeq[poz]<=n)
    ++poz;
  for(int i=n+1;i<=inputSeq[n-1];++i)
  {
    if(i==inputSeq[poz])
      ++poz;
    else
    {
      ans*=(n-poz);
      ans%=MOD;
    }
  }
  return ans;
}

Compilation message (stderr)

gondola.cpp:9:6: error: 'unordered_set' in namespace 'std' does not name a template type
    9 | std::unordered_set<int>e;
      |      ^~~~~~~~~~~~~
gondola.cpp:5:1: note: 'std::unordered_set' is defined in header '<unordered_set>'; did you forget to '#include <unordered_set>'?
    4 | #include "gondola.h"
  +++ |+#include <unordered_set>
    5 | #define MOD 1000000009
gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:14:12: error: 'e' was not declared in this scope
   14 |         if(e.find(inputSeq[i])!=e.end())
      |            ^
gondola.cpp:16:9: error: 'e' was not declared in this scope
   16 |         e.insert(inputSeq[i]);
      |         ^