답안 #50718

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
50718 2018-06-13T05:28:25 Z mirbek01 곤돌라 (IOI14_gondola) C++17
55 / 100
28 ms 3120 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 2;

int valid(int n, int inputSeq[])
{
      vector <pair <int, int> > v;
      for(int i = 0; i < n; i ++)
            if(inputSeq[i] <= n)
                  v.push_back({inputSeq[i], i + 1});
      sort(v.begin(), v.end());
      for(int i = 1; i < v.size(); i ++){
            int ab = v[i].first - v[i - 1].first, ds;
            if(v[i].second > v[i - 1].second){
                  ds = v[i].second - v[i - 1].second;
            } else {
                  ds = v[i].second + (n - v[i - 1].second);
            }
            if(ds != ab) return 0;
      }
      sort(inputSeq, inputSeq + n);
      for(int i = 1; i < n; i ++){
            if(inputSeq[i] == inputSeq[i - 1]) return 0;
      }
      return 1;
}

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

int used[N];

int replacement(int n, int gondolaSeq[], int rp[])
{
      int pos = 1, mx = 0, sz = 0, id = 0;
      vector <int> v, nm(n);
      vector < pair <int, int> > d;
      for(int i = 0; i < n; i ++){
            mx = max(mx, gondolaSeq[i]);
            used[gondolaSeq[i]] = 1;
            if(gondolaSeq[i] > n){
                  d.push_back({gondolaSeq[i], i});
            }
            else
                  pos = gondolaSeq[i], id = i;
      }
      for(int i = n + 1; i <= mx; i ++){
            if(!used[i])
                  v.push_back(i);
      }
      for(int i = 0; i < n; i ++){
            nm[id] = pos;
            pos ++;
            id ++;
            if(pos > n) pos = 1;
            if(id >= n) id = 0;
      }
      sort(d.begin(), d.end());
      int cur = n + 1;
      for(int i = 0; i < d.size(); i ++){
            int ps = nm[d[i].second];
            rp[sz ++] = ps;
            while(cur < d[i].first){
                  if(!used[cur])
                        rp[sz ++] = cur;
                  cur ++;
            }
      }
      return sz;
}

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

int countReplacement(int n, int inputSeq[])
{
      vector <pair <int, int> > v;
      for(int i = 0; i < n; i ++)
            if(inputSeq[i] <= n)
                  v.push_back({inputSeq[i], i + 1});
      sort(v.begin(), v.end());
      for(int i = 1; i < v.size(); i ++){
            int ab = v[i].first - v[i - 1].first, ds;
            if(v[i].second > v[i - 1].second){
                  ds = v[i].second - v[i - 1].second;
            } else {
                  ds = v[i].second + (n - v[i - 1].second);
            }
            if(ds != ab) return 0;
      }
      sort(inputSeq, inputSeq + n);
      for(int i = 1; i < n; i ++){
            if(inputSeq[i] == inputSeq[i - 1]) return 0;
      }
      memset(used, 0, sizeof(used));
      long long ans = 1, cnt = 0, mx = 0, mod = 1e9 + 7;
      for(int i = 0; i < n; i ++){
            used[ inputSeq[i] ] = 1;
            if(inputSeq[i] > n) cnt ++;
            if(mx < inputSeq[i]) mx = inputSeq[i];
      }

      for(int i = n + 1; i < mx; i ++){
            if(used[ inputSeq[i] ]){
                  cnt --;
                  continue;
            }
            ans = (ans * cnt) % mod;
      }

      return ans;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:14:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int i = 1; i < v.size(); i ++){
                      ~~^~~~~~~~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:61:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int i = 0; i < d.size(); i ++){
                      ~~^~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:82:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int i = 1; i < v.size(); i ++){
                      ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 428 KB Output is correct
5 Correct 2 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 460 KB Output is correct
2 Correct 2 ms 508 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 2 ms 512 KB Output is correct
5 Correct 2 ms 512 KB Output is correct
6 Correct 13 ms 1284 KB Output is correct
7 Correct 23 ms 2064 KB Output is correct
8 Correct 18 ms 2064 KB Output is correct
9 Correct 9 ms 2064 KB Output is correct
10 Correct 28 ms 2084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2084 KB Output is correct
2 Correct 2 ms 2084 KB Output is correct
3 Correct 2 ms 2084 KB Output is correct
4 Correct 2 ms 2084 KB Output is correct
5 Correct 2 ms 2084 KB Output is correct
6 Correct 13 ms 2084 KB Output is correct
7 Correct 23 ms 2084 KB Output is correct
8 Correct 18 ms 2084 KB Output is correct
9 Correct 9 ms 2084 KB Output is correct
10 Correct 28 ms 2084 KB Output is correct
11 Correct 2 ms 2084 KB Output is correct
12 Correct 2 ms 2084 KB Output is correct
13 Correct 7 ms 2084 KB Output is correct
14 Correct 2 ms 2084 KB Output is correct
15 Correct 21 ms 2084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2084 KB Output is correct
2 Correct 2 ms 2084 KB Output is correct
3 Correct 2 ms 2084 KB Output is correct
4 Correct 2 ms 2084 KB Output is correct
5 Correct 2 ms 2084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2084 KB Output is correct
2 Correct 2 ms 2084 KB Output is correct
3 Correct 2 ms 2084 KB Output is correct
4 Correct 2 ms 2084 KB Output is correct
5 Correct 2 ms 2084 KB Output is correct
6 Correct 2 ms 2084 KB Output is correct
7 Correct 2 ms 2084 KB Output is correct
8 Correct 2 ms 2084 KB Output is correct
9 Correct 2 ms 2084 KB Output is correct
10 Correct 2 ms 2084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2084 KB Output is correct
2 Correct 2 ms 2084 KB Output is correct
3 Correct 2 ms 2084 KB Output is correct
4 Correct 2 ms 2084 KB Output is correct
5 Correct 2 ms 2084 KB Output is correct
6 Correct 2 ms 2084 KB Output is correct
7 Correct 2 ms 2084 KB Output is correct
8 Correct 2 ms 2084 KB Output is correct
9 Correct 2 ms 2084 KB Output is correct
10 Correct 2 ms 2084 KB Output is correct
11 Correct 12 ms 2084 KB Output is correct
12 Correct 13 ms 2084 KB Output is correct
13 Correct 18 ms 2088 KB Output is correct
14 Correct 12 ms 2088 KB Output is correct
15 Correct 25 ms 3120 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 3120 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 3120 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 3120 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 3120 KB Output isn't correct
2 Halted 0 ms 0 KB -