제출 #1015345

#제출 시각아이디문제언어결과실행 시간메모리
1015345amirhoseinfar1385곤돌라 (IOI14_gondola)C++17
100 / 100
42 ms6084 KiB
#include "gondola.h"
#include<bits/stdc++.h>
using namespace std;
int inf=1e9+5,mod=1e9+9;
long long mypow(long long m,long long y){
  if(y==0){
    return 1;
  }
  long long p=mypow(m,(y>>1));
  p*=p;
  p%=mod;
  if(y&1){
    p*=m;
    p%=mod;
  }
  return p;
}


int fas(int u,int v,int n){
  //cout<<u<<" "<<v<<" "<<(u-v+n+n)%n<<endl;
  return (u-v+n+n)%n;
}

int valid(int n, int inputSeq[])
{
  set<int>st;
  int wh=-1,mn=inf;
  for(int i=0;i<n;i++){
    if(inputSeq[i]<mn){
      wh=i;
      mn=inputSeq[i];
    }
    if(st.count(inputSeq[i])==1){
      return 0;
    }
    st.insert(inputSeq[i]);
  }
  int last=mn,lastwh=wh;
  for(int i=0;i<n;i++){
    if(inputSeq[(i+wh)%n]<=n){
      if(inputSeq[(i+wh)%n]!=(mn+i)){
        return 0;
      }
      lastwh=(i+wh)%n;
      last=inputSeq[(i+wh)%n];
    }
  }
  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  set<pair<int,int>>st;
  int wh=-1,mn=inf;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i]<mn){
      wh=i;
      mn=gondolaSeq[i];
    }
  }
  wh=wh-mn+1;
  while(wh<0){
    wh+=n;
  }
  wh%=n;
  for(int i=0;i<n;i++){
    st.insert(make_pair(gondolaSeq[(wh+i)%n],i+1));
  }
  int now=n+1;
  vector<int>all(n+1);
  for(int i=1;i<=n;i++){
    all[i]=i;
  }
  while((int)st.size()>0){
    auto x=(*st.begin());
    st.erase(x);
    while(now<=x.first){
      replacementSeq[now-(n+1)]=all[x.second];
      all[x.second]=now;
      now++;   
    }
  }
  return (now-(n+1));
}

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

int countReplacement(int n, int inputSeq[])
{
  if(valid(n,inputSeq)==0){
    return 0;
  }
  vector<int>all;
  long long mn=inf;
  for(int i=0;i<n;i++){
    inf=min(inf,inputSeq[i]);
    if(inputSeq[i]>n){
      all.push_back(inputSeq[i]);
    }
  }
  all.push_back(n);
  sort(all.begin(),all.end());
  long long mainres=1;
  for(int i=1;i<(int)all.size();i++){
 //   cout<<"salam: "<<i<<endl;
    mainres*=mypow((all.size()-i),all[i]-all[i-1]-1);
    mainres%=mod;
   // cout<<"by"<<endl;
  }
  if(inf>n){
    mainres*=n;
    mainres%=mod;
  }
  return mainres;
}

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:39:7: warning: variable 'last' set but not used [-Wunused-but-set-variable]
   39 |   int last=mn,lastwh=wh;
      |       ^~~~
gondola.cpp:39:15: warning: variable 'lastwh' set but not used [-Wunused-but-set-variable]
   39 |   int last=mn,lastwh=wh;
      |               ^~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:97:13: warning: unused variable 'mn' [-Wunused-variable]
   97 |   long long mn=inf;
      |             ^~
#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...