Submission #31696

#TimeUsernameProblemLanguageResultExecution timeMemory
31696top34051Gondola (IOI14_gondola)C++14
75 / 100
49 ms7392 KiB
#include "gondola.h"
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define mod 1000000009LL

int n,m,mx;
int a[maxn], vis[250005];
map<int,int> s;

int valid(int N, int p[]) {
    int i, x = 0, val;
    n = N;
    //Build
    for(i=0;i<n;i++) if(p[i]<=n) x = i;
    val = p[x];
    for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1;
    //Check
    for(i=0;i<n;i++) if(p[i]<=n && a[i]!=p[i]) return 0;
    //Rep
    memset(vis,0,sizeof(vis));
    for(i=0;i<n;i++) {
        if(vis[p[i]]) return 0;
        vis[p[i]] = 1;
    }
    return 1;
}

int replacement(int N, int p[], int res[]) {
    int i, x=-1, val;
    n = N;
    //Build
    for(i=0;i<n;i++) if(p[i]<=n) x = i;
    if(x==-1) val = 1, x = 0;
    else val = p[x];
    for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1;
    //Check
    for(i=0;i<n;i++) {
        mx = max(mx,p[i]);
        if(p[i]>n) s[p[i]] = i;
    }
    m = 0;
    for(i=n+1;i<=mx;i++) {
        if(s.find(i)!=s.end()) res[m++] = a[s[i]], a[s[i]] = i, s.erase(s.find(i));
        else if(s.size()>0) res[m++] = a[s.begin()->second], a[s.begin()->second] = i;
        else return 0;
    }
    return m;
}

int countReplacement(int N, int p[]) {
    int i, x=-1, val;
    long long ans;
    n = N;
    //Build
    for(i=0;i<n;i++) if(p[i]<=n) x = i;
    if(x==-1) val = 1, x = 0;
    else val = p[x];
    for(i=0;i<n;i++) a[x] = val, x = (x+1)%n, val = val%n+1;
    //Check
    for(i=0;i<n;i++) if(p[i]<=n && a[i]!=p[i]) return 0;
    //Rep
    memset(vis,0,sizeof(vis));
    for(i=0;i<n;i++) {
        if(vis[p[i]]) return 0;
        vis[p[i]] = 1;
    }
    //Check
    for(i=0;i<n;i++) {
        mx = max(mx,p[i]);
        if(p[i]>n) s[p[i]] = i;
    }
    m = 0; ans = 1;
    for(i=n+1;i<=mx;i++) {
        if(s.find(i)!=s.end()) s.erase(s.find(i));
        else if(s.size()>0) ans = ((ans*s.size())%mod + mod)%mod;//, printf("%d: s.size() = %d\n",i,s.size());
        else return 0;
    }
    if(x==-1) printf("%d",1/0);
    return ans;
}

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:79:28: warning: division by zero [-Wdiv-by-zero]
     if(x==-1) printf("%d",1/0);
                            ^
#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...