Submission #1004855

# Submission time Handle Problem Language Result Execution time Memory
1004855 2024-06-21T19:42:10 Z u_suck_o Gondola (IOI14_gondola) C++17
75 / 100
11 ms 2220 KB
#include "bits/stdc++.h"
#include "gondola.h"
#define MOD 1000000009

using namespace std;

int valid(int n, int inputSeq[])
{
    bool seen[250001];
    memset(seen, 0, sizeof seen);
    bool found = false;
    int diff = -1;
    for (int i = 0; i < n; i++) {
        if (seen[inputSeq[i]]) return 0;
        seen[inputSeq[i]] = true;
        if (inputSeq[i] > n) continue;
        if (!found) {
            found = true;
            diff = (inputSeq[i] - i + n) % n;
        } else {
            if ((inputSeq[i] - i + n) % n != diff)
                return 0;
        }
    }
    return 1;
}

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int diff = 0;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] <= n) {
            diff = (gondolaSeq[i] - i + n) % n;
            break;
        }
    }
    
    vector<pair<int, int>> v;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] > n) {
            int x = (i+diff) % n;
            if (x == 0) x = n;
            v.push_back({gondolaSeq[i], x});
        }
    }
    sort(v.begin(), v.end());
    int last = n; //last assigned gondola #
    vector<int> rep;
    for (int i = 0; i < v.size(); i++) {
        rep.push_back(v[i].second); //v[i].second replaced with last+1
        for (int j = last+1; j < v[i].first; j++)
            rep.push_back(j); //j replaced with j+1
        last = v[i].first;
    }
    for (int i = 0; i < rep.size(); i++)
        replacementSeq[i] = rep[i];
    return rep.size();
}

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

long long modpow(long long b, long long e) {
    if (e == 0)
        return 1;
    if (e % 2 == 1)
        return (b * modpow(b, e-1)) % MOD;
    long long r = modpow(b, e/2);
    return (r * r) % MOD;
}

int countReplacement(int n, int inputSeq[])
{
    if (valid(n, inputSeq) == 0) return 0;
    long long ans = 1;
    vector<int> v;
    for (int i = 0; i < n; i++) {
        if (inputSeq[i] > n)
            v.push_back(inputSeq[i]);
    }
    sort(v.begin(), v.end());
    int last = n;
    for (int i = 0; i < v.size(); i++) {
        //cout << modpow(v.size()-i, v[i] - last);
        ans = (ans * modpow(v.size()-i, v[i] - last - 1)) % MOD;
        last = v[i];
    }
    return ans;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:49:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
gondola.cpp:55:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     for (int i = 0; i < rep.size(); i++)
      |                     ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:82:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 600 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 600 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 1 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 2 ms 604 KB Output is correct
7 Correct 5 ms 860 KB Output is correct
8 Correct 4 ms 860 KB Output is correct
9 Correct 2 ms 604 KB Output is correct
10 Correct 11 ms 884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 600 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 2 ms 604 KB Output is correct
7 Correct 5 ms 856 KB Output is correct
8 Correct 5 ms 856 KB Output is correct
9 Correct 4 ms 724 KB Output is correct
10 Correct 5 ms 860 KB Output is correct
11 Correct 1 ms 604 KB Output is correct
12 Correct 1 ms 604 KB Output is correct
13 Correct 3 ms 604 KB Output is correct
14 Correct 0 ms 604 KB Output is correct
15 Correct 5 ms 860 KB Output is correct
# Verdict Execution time Memory 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 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory 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 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 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 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 344 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 4 ms 600 KB Output is correct
12 Correct 5 ms 776 KB Output is correct
13 Correct 8 ms 1348 KB Output is correct
14 Correct 4 ms 604 KB Output is correct
15 Correct 11 ms 2220 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 1 ms 608 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 608 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 608 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 608 KB Output is correct
8 Correct 0 ms 608 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 1 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 600 KB Output is correct
9 Correct 8 ms 1816 KB Output is correct
10 Correct 7 ms 1628 KB Output is correct
11 Correct 3 ms 1116 KB Output is correct
12 Correct 6 ms 1116 KB Output is correct
13 Incorrect 2 ms 600 KB Output isn't correct
14 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 600 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 8 ms 1748 KB Output is correct
10 Correct 7 ms 1884 KB Output is correct
11 Correct 3 ms 1116 KB Output is correct
12 Correct 4 ms 1116 KB Output is correct
13 Incorrect 2 ms 828 KB Output isn't correct
14 Halted 0 ms 0 KB -