Submission #389386

#TimeUsernameProblemLanguageResultExecution timeMemory
389386Pichon5Gondola (IOI14_gondola)C++17
60 / 100
38 ms4596 KiB
#include <bits/stdc++.h> #include "gondola.h" #define vi vector<int> #define pb push_back #define F first #define S second #define ll long long int const ll MOD=1e9+7; using namespace std; int valid(int n, int v[]){ set<int>st; for(int i=0;i<n;i++){ st.insert(v[i]); } if(st.size()!=n)return 0; int pos=0; for(int i=0;i<n;i++){ if(v[i]<=n){ pos=i-(v[i]-1); if(pos<0)pos+=n; break; } } int now=1; for(int i=pos;i<n;i++){ if(v[i]<=n){ if(v[i]!=now){ return 0; } } now++; } for(int i=0;i<pos;i++){ if(v[i]<=n){ if(v[i]!=now){ return 0; } } now++; } return 1; } //---------------------- int replacement(int n, int v[], int R[]) { int pos1=0; for(int i=0;i<n;i++){ if(v[i]<=n){ int B=v[i]-1; if(i-B>=0){ pos1=i-B; }else{ B-=i; pos1=n-B; } break; } } int pos=pos1; vector<pair<int,int> >E;//gondola final y gondola inicial for(int i=1;i<=n;i++){ E.pb({v[pos],i}); pos++; if(pos==n)pos=0; } sort(E.begin(),E.end()); int next=n+1; int res=0; for(int i=0;i<n;i++){ if(E[i].F==E[i].S)continue; R[res]=E[i].S;next++;res++; //cout<<"pongo "<<E[i].S<<endl; int curr=next-1; while(curr!=E[i].F){ //cout<<"pongo "<<curr<<endl; R[res]=curr; curr++;next++;res++; } } //cout<<"respuesta "<<res<<endl; //cout<<endl; return res; } //---------------------- int countReplacement(int n, int v[]){ if(!valid(n,v))return 0; ll res=1; vi sum(250001,0); ll m=n; bool ok=0; for(int i=0;i<n;i++)sum[v[i]]++; for(int i=249999;i>n;i--)sum[i]+=sum[i+1]; for(int i=n+1;i<250000;i++){ if(sum[i]==0)break; if(sum[i]==sum[i+1]){ res*=sum[i]; res%=MOD; } } for(int i=0;i<n;i++){ if(v[i]<=n){ m=1; } } res*=m; res%=MOD; return res; } //number of subtask //n //3 1 4 //5 1 2 3 4 //2 3 4 9 6 7 1

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:17:14: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   17 |  if(st.size()!=n)return 0;
      |     ~~~~~~~~~^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:96:10: warning: unused variable 'ok' [-Wunused-variable]
   96 |     bool ok=0;
      |          ^~
#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...