Submission #136644

# Submission time Handle Problem Language Result Execution time Memory
136644 2019-07-26T00:36:31 Z vince Gondola (IOI14_gondola) C++14
Compilation error
0 ms 0 KB
#include "gondola.h"
#include <set>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <vector>
#include <algorithm>
using namespace std;
 
int valid(int n, int inputSeq[])
{
    set<int> st;
    int num = -1;
    for(int i = 0; i < n; i++)
    {
        st.insert(inputSeq[i]);
        int idx = i%n;
        if(inputSeq[idx] <= n && num == -1)
            num = inputSeq[idx];
        
        if(inputSeq[idx] <= n & num != inputSeq[idx])
            return 0;
        
        if(num != -1)
        {
            num++;
            if(num == n+1)
                num -= n;
        }
    }
    return st.size() == n;
}
 
//----------------------
 
int A[500003];
int pos[500003];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    memset(pos, -1, sizeof pos);
    int mx = 0;
    for(int i = 0; i < n; i++)
    {
        A[i] = gondolaSeq[i];
        mx = max(mx, A[i]);
        pos[A[i]] = i;
    }
    
    for(int i = 0; i < 3*n; i++)
    {
        if(A[(i-1+n)%n] <= n)
            A[i%n] = A[(i-1+n)%n]+1;
        
        if(A[i%n] == n+1) A[i%n] = 1;
    }
    if(A[0] > n)
    {
        for(int i = 0; i < n; i++)
        {
            A[i] = i+1;
        }
    }
    
//    for(int i = 0; i < n; i++)
//        printf("%d\n", A[i]);
    
    int sz = 0;
    for(int i = n+1; i <= mx; i++)
    {
//        printf("%d %d\n", i, pos[i]);
        if(pos[i] == -1)
        {
            if(gondolaSeq[pos[mx]]  == A[pos[mx]]) assert(0);
            replacementSeq[sz++] = A[pos[mx]];
            A[pos[mx]] = i;
            
        }
        else
        {
            if(gondolaSeq[pos[i]]  == A[pos[i]]) assert(0);
            replacementSeq[sz++] = A[pos[i]],
            A[pos[i]] = i;
        }
    }
    for(int i = 0; i < n; i++)
    {
        if(A[pos[gondolaSeq[i]]] < gondolaSeq[i])
            assert(0);
    }
 
    
    for(int i = 0; i < n; i++)
    {
//        if(A[i] != gondolaSeq[i])
//            printf("%d %d %d\n", i, A[i], gondolaSeq[i]);
    }
//    printf("\n");
    
    
    return sz;
}


 
//----------------------
 
const long long MOD = 1e9+9;
bool ada[500003];

long long pwr(long long a, long long b)
{
	if(b == 0) return 1;
	else if(b == 2) return (a*a)%MOD;
	else if(b&1) return (pwr(a,b-1)*a)%MOD;
	else return pwr(pwr(a,b/2), 2);
}

int countReplacement(int n, int inputSeq[])
{
    if(!valid(n, inputSeq))
        return 0;
    
    long long res = 1;
    long long hit = 0;
    int mx = 0;
    
    vector<long long> vec;
    for(int i = 0; i < n; i++)
    {
        if(inputSeq[i] > n) hit++;
        if(inputSeq[i] > n) vec.push_back(inputSeq[i]);
        
    }
    if(hit == n) res = n;

    sort(vec.begin(), vec.end())
    
    long long bef = n;
    for(int i = 0; i < n; i++)
    {
    	res = (res*pwr(hit,vec[i]-bef-1))%MOD;
    	hit--;
    	bef = vec[i];
    }
    
    return res;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:21:26: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
         if(inputSeq[idx] <= n & num != inputSeq[idx])
            ~~~~~~~~~~~~~~^~~~
gondola.cpp:31:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     return st.size() == n;
            ~~~~~~~~~~^~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:138:5: error: expected ';' before 'long'
     long long bef = n;
     ^~~~
gondola.cpp:141:32: error: 'bef' was not declared in this scope
      res = (res*pwr(hit,vec[i]-bef-1))%MOD;
                                ^~~
gondola.cpp:125:9: warning: unused variable 'mx' [-Wunused-variable]
     int mx = 0;
         ^~