Submission #583902

#TimeUsernameProblemLanguageResultExecution timeMemory
583902Mr_HusanboyGondola (IOI14_gondola)C++14
55 / 100
51 ms5580 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define ull unsigned long long
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(a) a.begin(), a.end()
#define F first
#define S second
#define fp(a,i,c) for(int (a) = (i); (a) < (c); (a)++)
#define fm(a,i,c) for(int (a) = (i); (a) >= (c); (a)--)
#define vii vector<int>
#define vll vector<ll>
const long long mod=1e9+9;

ll binpow(ll a, ll n){
    if(n==0) return 1;
    ll res=binpow(a,n/2);
    res=(res*res)%mod;
    if(n%2) res=(res*a)%mod;
    return res;
}

int valid(int n, int a[])
{
  map<int,int> mp;
  vector<pair<int,int>> pos;
  for(int i=0;i<n;i++){
    if(mp.count(a[i])) return 0;
    mp[a[i]]=i;
  }
  bool ok=1;
  for(int i=1;i<=n;i++){
    if(mp.count(i)){
        pos.push_back({mp[i],i});
    }
  }
  for(int i=1;i<pos.size();i++){
    int d=abs(pos[i-1].F-pos[i].F);
    if(pos[i-1].F>pos[i].F){
        d=n-d;
    }
    if(d!=pos[i].S-pos[i-1].S) return 0;
  }
  return 1;
}

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

int replacement(int n, int g[], int ans[])
{
  int mn=0;
  for(int i=0;i<n;i++){
    if(g[mn]>g[i]) mn=i;
  } vector<int> ng(n);
  if(g[mn]<=n){
    int cnt=0;mn-=g[mn]-1;
    if(mn<0) mn+=n;// cout<<mn<<" mN\n";
    for(int i=mn;i<n;i++) ng[cnt++]=g[i];
    for(int i=0;i<mn;i++) ng[cnt++]=g[i];
  }else for(int i=0;i<n;i++) ng[i]=g[i];
  vector<pair<int,int>> pos;
  for(int i=0;i<n;i++){
    pos.push_back({ng[i],i+1});
  }//for(int i=0;i<n;i++) cout<<ng[i]<<' ';cout<<endl;
  sort(pos.begin(),pos.end());
  int cur=n+1;
  vector<int> res;
  for(int i=0;i<n;i++){
    if(pos[i].F==pos[i].S) continue;
    res.push_back(pos[i].S);
    while(cur<pos[i].F) res.push_back(cur++);
    cur++;
  }
  for(int i=0;i<cur-n-1;i++) ans[i]=res[i];
  return cur-n-1;
}

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

int countReplacement(int n, int g[])
{
  if(valid(n,g)==0) return 0;
  int mn=0;
  for(int i=0;i<mn;i++) if(g[mn]>g[i]) mn=i;
  vector<int> ng(n);
  if(g[mn]<=n){
    int cnt=0;mn-=g[mn]-1;
    if(mn<0) mn+=n;// cout<<mn<<" mN\n";
    for(int i=mn;i<n;i++) ng[cnt++]=g[i];
    for(int i=0;i<mn;i++) ng[cnt++]=g[i];
  }else for(int i=0;i<n;i++) ng[i]=g[i];
  vector<pair<int,int>> pos;
  for(int i=0;i<n;i++){
    pos.push_back({ng[i],i+1});
  }for(int i=0;i<n;i++) cout<<ng[i]<<' ';cout<<endl;
  sort(pos.begin(),pos.end());
  ll ans=1; ll cnt=0;
  for(int i=0;i<n;i++) if(pos[i].F!=pos[i].S) cnt++;
  bool ok=(cnt==n); ll cur=n+1;
  for(int i=0;i<n;i++){
        if(pos[i].F==pos[i].S) continue;
        ans*=binpow(cnt,pos[i].F-cur); cur=pos[i].F+1; cnt--; ans%=mod;
    //cout<<ans<<"\n";
  }
  if(ok) ans=(ans*n)%mod;
  return ans;
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:39:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |   for(int i=1;i<pos.size();i++){
      |               ~^~~~~~~~~~~
gondola.cpp:33:8: warning: unused variable 'ok' [-Wunused-variable]
   33 |   bool ok=1;
      |        ^~
#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...