Submission #1099272

#TimeUsernameProblemLanguageResultExecution timeMemory
1099272LuvidiGondola (IOI14_gondola)C++17
55 / 100
12 ms2352 KiB
#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 (stderr)

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++){
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...