답안 #516077

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
516077 2022-01-20T11:06:30 Z antonioqbab 곤돌라 (IOI14_gondola) C++14
60 / 100
36 ms 4656 KB
#include <bits/stdc++.h>
#include <gondola.h>

using namespace std;


int valid(int n, int a[])
{
    map<int,int> mp;
    int index=-1;
    for(int i=0; i<n; ++i)
    {
        if(mp.count(a[i]))
            return 0;
        ++mp[a[i]];
    }
    for(int i=0; i<n; ++i)
        if(a[i]<=n)
        {
            index=i;
            break;
        }
    if(index==-1)
        return 1;
    int cur=a[index];
    cur=cur==n?1:cur+1;
    for(int j=(index+1)%n; j!=index; j=(j+1)%n,cur=cur==n?1:cur+1)
        if(a[j]<=n && a[j] !=cur)
            return 0;
    return 1;
}

int replacement(int n, int a[], int ans[])
{
    vector<int> real(n);
    int index=-1, sol=0, cur;
    for(int i=0; i<n; ++i)
        if(a[i]<=n)
        {
            real[i]=a[i];
            index=i;
            break;
        }
    if(index==-1){
        real[0]=1;
        index=0;
    }
    cur=real[index];
    cur=cur==n?1:cur+1;
    for(int j=(index+1)%n; j!=index; j=(j+1)%n,cur=cur==n?1:cur+1)
        real[j]=cur;
    vector<pair<int,int>> b;
    for(int i=0; i<n; ++i)
        if(a[i]>n)
            b.emplace_back(a[i],i);
    sort(b.begin(),b.end());
    int last=n;
    for(auto [val,idx]:b)
    {
        ans[sol++]=real[idx];
        for(int i=last+1; i<val; ++i)
            ans[sol++]=i;
        last=val;
    }
    return sol;
}

int countReplacement(int n, int a[])
{
    if(!valid(n,a))
        return 0;
    const int mod = 1e9+9;
     vector<int> real(n);
    int index=-1, cur, sol=1;
    for(int i=0; i<n; ++i)
        if(a[i]<=n)
        {
            real[i]=a[i];
            index=i;
            break;
        }
    if(index==-1){
        real[0]=1;
        for(int i=2;i<=n;++i)
            sol = 1LL*sol*i%mod;
        index=0;
    }
    cur=real[index];
    cur=cur==n?1:cur+1;
    for(int j=(index+1)%n; j!=index; j=(j+1)%n,cur=cur==n?1:cur+1)
        real[j]=cur;
    vector<pair<int,int>> b;
    for(int i=0; i<n; ++i)
        if(a[i]>n)
            b.emplace_back(a[i],i);
    sort(b.begin(),b.end());
    int last=n, cnt=b.size();
    auto pow=[&](int b, int e){
        if(e<1)
            return 1;
        int ans =1;
        while(e){
            if(e&1)
                ans=1LL*ans*b%mod;
            b=1LL*b*b%mod, e>>=1;
        }
        return ans;
    };
    for(auto [val,idx]:b)
    {

        sol=(1LL*sol*pow(cnt,val-1-last))%mod;
        last=val;
    }
    return sol;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:58:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   58 |     for(auto [val,idx]:b)
      |              ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:109:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  109 |     for(auto [val,idx]:b)
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 2220 KB Output is correct
7 Correct 7 ms 588 KB Output is correct
8 Correct 22 ms 3916 KB Output is correct
9 Correct 6 ms 1356 KB Output is correct
10 Correct 29 ms 4576 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 11 ms 2128 KB Output is correct
7 Correct 7 ms 588 KB Output is correct
8 Correct 22 ms 3828 KB Output is correct
9 Correct 6 ms 1356 KB Output is correct
10 Correct 27 ms 4500 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 17 ms 1964 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 36 ms 4656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 11 ms 924 KB Output is correct
12 Correct 9 ms 908 KB Output is correct
13 Correct 12 ms 1236 KB Output is correct
14 Correct 7 ms 844 KB Output is correct
15 Correct 17 ms 2276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 284 KB Output is correct
3 Correct 0 ms 252 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 0 ms 204 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 296 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 1 ms 204 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Incorrect 0 ms 260 KB Output isn't correct
6 Halted 0 ms 0 KB -