답안 #1029615

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1029615 2024-07-21T06:08:42 Z Malix 곤돌라 (IOI14_gondola) C++14
75 / 100
19 ms 2360 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<int,int,int> tii;
typedef vector<ll> li;
typedef vector<li> lii;

#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define LSOne(s) ((s)&(-s))

ll INF=1e18+10;
int inf=1e9+10;
ll M=1e9+9;

int valid(int n, int inputSeq[])
{
  bool flag=1;
  int pos=0,val=inf;
  REP(i,0,n)if(inputSeq[i]<val){
    val=inputSeq[i];
    pos=i;
  }
  if(val>n){
    sort(inputSeq,inputSeq+n);
    REP(i,0,n-1)if(inputSeq[i]==inputSeq[i+1])flag=0;
    if(flag)return 1;
    return 0;
  }
  int c=pos;
  pos++;val++;
  pos%=n;val%=n;if(val==0)val=n;
  while(pos!=c){
    if(inputSeq[pos]!=val&&inputSeq[pos]<=n){
      flag=0;
      break;
    }
    pos++;val++;
    pos%=n;val%=n;if(val==0)val=n;
  }
  sort(inputSeq,inputSeq+n);
  REP(i,0,n-1)if(inputSeq[i]==inputSeq[i+1])flag=0;
  if(flag)return 1;
  return 0;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  int pos=0,val=inf;
  REP(i,0,n)if(gondolaSeq[i]<val){
    val=gondolaSeq[i];
    pos=i;
  }
  priority_queue<pi,vector<pi>,greater<pi>> pq;
  int c=pos;pos%=n;val%=n;if(val==0)val=n;
  if(gondolaSeq[pos]!=val)pq.push({gondolaSeq[pos],val});
  pos++;val++;
  pos%=n;val%=n;if(val==0)val=n;
  while(pos!=c){
    if(gondolaSeq[pos]!=val)pq.push({gondolaSeq[pos],val});
    pos++;val++;
    pos%=n;val%=n;if(val==0)val=n;
  }
  vi ans;int k=n+1;
  while(!pq.empty()){
    int x=pq.top().F;
    int y=pq.top().S;
    pq.pop();
    ans.PB(y);
    REP(i,k,x)ans.PB(i);
    k=x+1;
  }
  int m=ans.size();
  REP(i,0,m)replacementSeq[i]=ans[i];
  return m;
}

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

int countReplacement(int n, int inputSeq[])
{
  int temp[n];
  copy(inputSeq,inputSeq+n,temp);
  if(valid(n,inputSeq)==0)return 0;
  copy(temp,temp+n,inputSeq);
  int pos=0,val=inf;
  REP(i,0,n)if(inputSeq[i]<val){
    val=inputSeq[i];
    pos=i;
  }
  priority_queue<pi> pq;
  int c=pos;pos%=n;val%=n;if(val==0)val=n;
  if(inputSeq[pos]!=val)pq.push({inputSeq[pos],val});
  pos++;val++;
  pos%=n;val%=n;if(val==0)val=n;
  while(pos!=c){
    if(inputSeq[pos]!=val)pq.push({inputSeq[pos],val});
    pos++;val++;
    pos%=n;val%=n;if(val==0)val=n;
  }
  if(pq.empty())return 1;
  ll ans=1;ll k=0;
  ll val2=(ll)pq.top().F;k++;
  pq.pop();
  pq.push({n,0});
  while(!pq.empty()){
    ll x=pq.top().F;
    pq.pop();
    int t=val2-x-1;
    if(t!=0)REP(i,0,t){
      ans*=k;
      ans%=M;
    }
    k++;
    val2=x;
    ans%=M;
  }
  return (int)ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 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
# 결과 실행 시간 메모리 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 5 ms 348 KB Output is correct
7 Correct 10 ms 740 KB Output is correct
8 Correct 6 ms 604 KB Output is correct
9 Correct 3 ms 348 KB Output is correct
10 Correct 12 ms 604 KB Output is correct
# 결과 실행 시간 메모리 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 4 ms 348 KB Output is correct
7 Correct 10 ms 604 KB Output is correct
8 Correct 6 ms 604 KB Output is correct
9 Correct 3 ms 348 KB Output is correct
10 Correct 12 ms 768 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 4 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 10 ms 780 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 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
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 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 1 ms 344 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 348 KB Output is correct
# 결과 실행 시간 메모리 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 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 5 ms 604 KB Output is correct
12 Correct 8 ms 600 KB Output is correct
13 Correct 10 ms 1372 KB Output is correct
14 Correct 5 ms 604 KB Output is correct
15 Correct 14 ms 2360 KB Output is correct
# 결과 실행 시간 메모리 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
# 결과 실행 시간 메모리 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
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
# 결과 실행 시간 메모리 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 16 ms 2008 KB Output is correct
10 Correct 16 ms 1936 KB Output is correct
11 Correct 8 ms 1116 KB Output is correct
12 Correct 7 ms 1372 KB Output is correct
13 Incorrect 3 ms 604 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 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 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 19 ms 2008 KB Output is correct
10 Correct 14 ms 1752 KB Output is correct
11 Correct 6 ms 1112 KB Output is correct
12 Correct 7 ms 1116 KB Output is correct
13 Incorrect 2 ms 604 KB Output isn't correct
14 Halted 0 ms 0 KB -