Submission #320050

#TimeUsernameProblemLanguageResultExecution timeMemory
320050keta_tsimakuridzeGondola (IOI14_gondola)C++14
60 / 100
25 ms2796 KiB
#include<bits/stdc++.h>
#include "gondola.h"
#define f first
#define s second
#define mp make_pair
#include <stdio.h>
#include <assert.h>
using namespace std;
const int mod=1e9+7;
const int N=2e5+5;
int fix[N],c[N];
int valid(int n, int a[])
{

	vector<pair<int,int> > V;
  for(int i=0;i<n;i++){
  	if(fix[a[i]]) return 0;
  	if(a[i]<=n) {
  		V.push_back(mp(a[i],i));
	  }
	fix[a[i]]=1;
  }	
  for(int i=1;i<V.size();i++){
  	if(V[i].f>V[i-1].f){
	  if(V[i].f-V[i-1].f!=V[i].s-V[i-1].s)	return 0;}
	  else {
	  	if(V[i].s-V[i-1].s!=n-V[i-1].f+V[i].f) return 0;
	  }
  }
  return 1;
}
//--------------------
int replacement(int n, int a[], int b[])
{ 
	int mx=0;
	int ind=-1;
	for(int i=0;i<n;i++){
		mx=max(mx,a[i]);
		if(a[i]<=n) ind=i;
		fix[a[i]]=i+1; }
	if(ind==-1){
	
	for(int i=0;i<n;i++)
	c[i]=i+1;}
	else {
		for(int i=ind;i<n;i++){
			c[i]=(a[ind]-1+i-ind)%n;
			c[i]++;
		}
		for(int i=ind-1;i>=0;i--){
			c[i]=(a[ind]-1-(ind-i)+n)%n;
			c[i]++;
		}
	}
	for(int i=n+1;i<=mx;i++){
		if(fix[i]) {
			b[i-n-1]=c[fix[i]-1];
			c[fix[i]-1]=i;
		}
		else {
			b[i-n-1]=c[fix[mx]-1];
			c[fix[mx]-1]=i;
		}
	}
  return mx-n;
}

//----------------------
long long pwr(int u,int v){
	if(v==1) return u;
	if(v%2) return pwr(u,v-1)*u%mod;
	long long p=pwr(u,v/2);
	return p*p%mod;
}
int countReplacement(int n, int a[])
{
	vector<int>V;
	long long ans=1;
	for(int i=0;i<n;i++){
	if(fix[a[i]]) return 0;
	if(a[i]>n) V.push_back(a[i]); fix[a[i]]=1;}
	V.push_back(n);
	if(!V.size())return 1;
	sort(V.begin(),V.end());
	for(int i=1;i<V.size();i++){
		if(V[i]==V[i-1]+1) continue;
		ans*=pwr(V.size()-i,V[i]-V[i-1]-1);
		ans%=mod;
	}
	if(V.size()==n+1)ans*=n,ans%=mod;
	
	
  return ans;
}

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:23: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]
   23 |   for(int i=1;i<V.size();i++){
      |               ~^~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:81:2: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   81 |  if(a[i]>n) V.push_back(a[i]); fix[a[i]]=1;}
      |  ^~
gondola.cpp:81:32: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   81 |  if(a[i]>n) V.push_back(a[i]); fix[a[i]]=1;}
      |                                ^~~
gondola.cpp:85:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |  for(int i=1;i<V.size();i++){
      |              ~^~~~~~~~~
gondola.cpp:90:13: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   90 |  if(V.size()==n+1)ans*=n,ans%=mod;
      |     ~~~~~~~~^~~~~
#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...