답안 #775191

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
775191 2023-07-06T08:38:11 Z danikoynov 곤돌라 (IOI14_gondola) C++14
컴파일 오류
0 ms 0 KB
#include "gondola.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;

int cnt[maxn];
int valid(int n, int inputSeq[])
{
    for (int i = 0; i < n; i ++)
    {
        int val = inputSeq[(i + 1) % n];

        if (inputSeq[i] == n && val == 1)
            continue;
        if (val != inputSeq[i] + 1)
        {
            ///cout << i << endl;
            ///cout << inputSeq[i] << " " << val << endl;
            return 0;
        }

    }
    return 1;
}

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

int order[maxn], to_go[maxn];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int pivot = 0;
    while(pivot < n && gondolaSeq[pivot] > n)
        pivot ++;

    if (pivot == n)
    {
        pivot = 0;
        for (int i = 0; i < n; i ++)
            order[i] = gondolaSeq[i];
    }
    else
    {
        order[gondolaSeq[pivot] - 1] = gondolaSeq[pivot];
        for (int i = pivot + 1; i < n + pivot; i ++)
        {
            order[(gondolaSeq[pivot] - 1 + (i - pivot)) % n] = gondolaSeq[i % n];
        }
    }
    ///for (int i = 0; i < n; i ++)
    ///cout << order[i] << " ";
    /// cout << endl;
    int mx = 0, pt = 0;

    for (int i = 0; i < n; i ++)
    {
        if (order[i] > n)
        {
            if (order[i] > mx)
            {
                mx = order[i];
                pt = i + 1;
            }
            to_go[order[i]] = i + 1;
        }
    }
    ///cout << mx << " " << pt << endl;

    int idx = 0, last_free = pt;
    for (int i = n + 1; i <= mx; i ++)
    {
        if (to_go[i] != 0)
        {
            if (to_go[i] == pt)
                replacementSeq[idx ++] = last_free;
            else
                replacementSeq[idx ++] = to_go[i];
        }
        else
        {
            replacementSeq[idx ++] = last_free;
            last_free = i;
        }
    }
    return max(0, mx - n);
}

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

typedef long long ll;
const ll mod = 1e9 + 7;
int countReplacement(int n, int inputSeq[])
{

    map < int > mp;
    for (int i = 0; i < n; i ++)
    {
        if (mp[a[i]] != 0)
            return 0;
        mp[a[i]] = 1;
    }
     int pivot = 0;
    while(pivot < n && inputSeq[pivot] > n)
        pivot ++;

    if (pivot == n)
    {
        pivot = 0;
        for (int i = 0; i < n; i ++)
            order[i] = inputSeq[i];
    }
    else
    {
        order[inputSeq[pivot] - 1] = inputSeq[pivot];
        for (int i = pivot + 1; i < n + pivot; i ++)
        {
            order[(inputSeq[pivot] - 1 + (i - pivot)) % n] = inputSeq[i % n];
        }
    }
    ///for (int i = 0; i < n; i ++)
    ///cout << order[i] << " ";
    /// cout << endl;
    int mx = 0, pt = 0;

    for (int i = 0; i < n; i ++)
    {
        if (order[i] > n)
        {
            if (order[i] > mx)
            {
                mx = order[i];
                pt = i + 1;
            }
            to_go[order[i]] = i + 1;
        }
    }
    ///cout << mx << " " << pt << endl;
    ll sp = 0;
    for (int i = 0; i < n; i ++)
        if (order[i] > n)
        sp ++;

    //cout << sp << endl;
    int idx = 0, last_free = pt, ways = 1;
    if (sp == n)
        ways = n;
    for (int i = n + 1; i <= mx; i ++)
    {
        if (ways == 0)
            return 0;
        if (to_go[i] != 0)
        {
            sp --;
            //if (to_go[i] == pt)
              //  replacementSeq[idx ++] = last_free;
            //else
              ///  replacementSeq[idx ++] = to_go[i];
        }
        else
        {
            ways = (ways * sp) % mod;
            ///replacementSeq[idx ++] = last_free;
            ///last_free = i;
        }
    }
    return ways;
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:94:15: error: wrong number of template arguments (1, should be at least 2)
   94 |     map < int > mp;
      |               ^
In file included from /usr/include/c++/10/map:61,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:81,
                 from gondola.cpp:2:
/usr/include/c++/10/bits/stl_map.h:100:11: note: provided for 'template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map'
  100 |     class map
      |           ^~~
gondola.cpp:97:16: error: 'a' was not declared in this scope
   97 |         if (mp[a[i]] != 0)
      |                ^
gondola.cpp:99:12: error: 'a' was not declared in this scope
   99 |         mp[a[i]] = 1;
      |            ^
gondola.cpp:143:9: warning: unused variable 'idx' [-Wunused-variable]
  143 |     int idx = 0, last_free = pt, ways = 1;
      |         ^~~
gondola.cpp:143:18: warning: unused variable 'last_free' [-Wunused-variable]
  143 |     int idx = 0, last_free = pt, ways = 1;
      |                  ^~~~~~~~~