답안 #1099272

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1099272 2024-10-11T04:10:47 Z Luvidi 곤돌라 (IOI14_gondola) C++17
55 / 100
12 ms 2352 KB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;

#define ll long long

ll MOD=1e9+9;

ll pm(ll a,ll b){
    if(!b)return 1;
    ll c=pm(a*a%MOD,b/2);
    if(b%2)return a*c%MOD;
    return c;
}

int valid(int n, int a[])
{ 
    set<int> s;
    int sh=0;
    for(int i=0;i<n;i++){
        if(a[i]>n){
            if(s.count(a[i]))return 0;
            s.insert(a[i]);
        }else{
            sh=i+1-a[i];
        }
    }
    for(int i=0;i<n;i++){
        int idx=i+sh;
        idx=(idx%n+n)%n;
        if(a[idx]<=n&&a[idx]!=i+1)return 0;
    }
    return 1;
}

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

int replacement(int n, int a[], int b[])
{   
    int a2[n];
    vector<pair<int,int>> v;
    int sh=0;
    for(int i=0;i<n;i++){
        if(a[i]>n){
            v.push_back({a[i],i});
        }else{
            sh=i+1-a[i];
        }
    }
    for(int i=0;i<n;i++){
        int idx=i+sh;
        idx=(idx%n+n)%n;
        a2[idx]=i+1;
    }
    sort(begin(v),end(v));
    int last=n,cnt=0;
    for(auto[x,i]:v){
        b[cnt++]=a2[i];
        last++;
        while(last<x){
            b[cnt++]=last++;
        }
    }
    return cnt;
}

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

int countReplacement(int n, int a[])
{   
    set<int> s;
    int sh=0;
    for(int i=0;i<n;i++){
        if(a[i]>n){
            if(s.count(a[i]))return 0;
            s.insert(a[i]);
        }else{
            sh=i+1-a[i];
        }
    }
    for(int i=0;i<n;i++){
        int idx=i+sh;
        idx=(idx%n+n)%n;
        if(a[idx]<=n&&a[idx]!=i+1)return 0;
    }
    vector<int> v;
    for(int i:s)v.push_back(i);
    sort(begin(v),end(v));
    int last=n;
    ll ans=1;
    for(int i=0;i<v.size();i++){
        last=v[i];
        v[i]-=last;
        ans=ans*pm(v.size()-i,v[i]-1)%MOD;
    }
    return ans;
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:91:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 3 ms 556 KB Output is correct
7 Correct 6 ms 776 KB Output is correct
8 Correct 5 ms 604 KB Output is correct
9 Correct 2 ms 348 KB Output is correct
10 Correct 6 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 396 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Correct 3 ms 348 KB Output is correct
7 Correct 6 ms 600 KB Output is correct
8 Correct 5 ms 604 KB Output is correct
9 Correct 2 ms 348 KB Output is correct
10 Correct 9 ms 604 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 12 ms 2140 KB Output is correct
14 Correct 1 ms 348 KB Output is correct
15 Correct 11 ms 1664 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 600 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 6 ms 860 KB Output is correct
12 Correct 6 ms 1116 KB Output is correct
13 Correct 9 ms 1516 KB Output is correct
14 Correct 5 ms 860 KB Output is correct
15 Correct 12 ms 2352 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -