Submission #705681

#TimeUsernameProblemLanguageResultExecution timeMemory
705681ToroTNGondola (IOI14_gondola)C++14
100 / 100
47 ms3120 KiB
#include<bits/stdc++.h> using namespace std; #include "gondola.h" //#include "grader.cpp" #define X first #define Y second #define pb push_back #define ll long long int a[100005]; int valid(int n, int s[]) { for (int i=0; i<n; ++i) { if (s[i]<=n) { int val=s[i]; for (int j=i+1; j<n; ++j) { ++val; if (val>n) val-=n; if (s[j]<=n && s[j]!=val) return 0; } break; } } sort(s,s+n); for (int i=1; i<n; ++i) if (s[i]==s[i-1]) return 0; return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int peteza[]) { for(int i=0;i<n;i++) { a[i+1]=gondolaSeq[i]; } int mx=0,origin[100005]; for(int i=1;i<=n;i++)mx=max(mx,a[i]),origin[i]=i; for(int i=1;i<=n;i++) { if(a[i]<=n) { for(int j=i;j<i+n;j++) { if(j<=n) { if(a[i]+j-i<=n) { origin[j]=a[i]+j-i; }else { origin[j]=a[i]+j-i-n; } }else { if(a[i]+j-i<=n) { origin[j-n]=a[i]+j-i; }else { origin[j-n]=a[i]+j-i-n; } } } break; } } int it=-1; vector<pair<int,int> > v; v.pb({-1e9,-1e9}); for(int i=1;i<=n;i++)v.pb({a[i],origin[i]}); sort(v.begin(),v.end()); for(int i=1;i<=n;i++) { if(v[i].X>n) { ++it; peteza[it]=v[i].Y; if(v[i-1].X>n) { for(int j=v[i-1].X+1;j<v[i].X;j++) { ++it; peteza[it]=j; } }else { for(int j=n+1;j<v[i].X;j++) { ++it; peteza[it]=j; } } } } return mx-n; } //---------------------- ll MOD=1e9+9; ll power(ll base,ll num) { ll powerx[35]; powerx[0]=base; for(int i=1;i<=30;i++) { powerx[i]=powerx[i-1]*powerx[i-1]; powerx[i]%=MOD; } vector<ll> vec; while(1) { if(num<=1) { vec.pb(num); break; } vec.pb(num%2); num/=2; } ll super=1; for(int i=0;i<vec.size();i++) { if(vec[i]==1) { super*=powerx[i]; super%=MOD; } } return super; } int countReplacement(int n, int inputSeq[]) { int num=valid(n,inputSeq); if(num==0)return 0; for(int i=0;i<n;i++) { a[i+1]=inputSeq[i]; } ll ans=1,cnt=0; vector<ll> v; v.pb(-1e9); for(int i=1;i<=n;i++) { if(a[i]>n) { v.pb(a[i]); ++cnt; } } sort(v.begin(),v.end()); if(v.size()>=2) { for(int i=1;i<v.size();i++) { ll kuay; if(i==1) { kuay=v[i]-n-1; }else { kuay=v[i]-v[i-1]-1; } //printf("%lld %lld\n",cnt,kuay); ans*=power(cnt,kuay); ans%=MOD; --cnt; } //printf("\n"); } if(v.size()==n+1) { ans*=n; ans%=MOD; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'long long int power(long long int, long long int)':
gondola.cpp:122:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  122 |     for(int i=0;i<vec.size();i++)
      |                 ~^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:154:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  154 |         for(int i=1;i<v.size();i++)
      |                     ~^~~~~~~~~
gondola.cpp:171:16: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  171 |     if(v.size()==n+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...