제출 #635126

#제출 시각아이디문제언어결과실행 시간메모리
635126PoonYaPat곤돌라 (IOI14_gondola)C++14
75 / 100
19 ms2644 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1000000009; int head[250001]; 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 s[], int ans[]) { int mmax=0,hm,sc=0; bool fix=false; for (int i=0; i<n; ++i) { mmax=max(mmax,s[i]); if (s[i]<=n) { fix=true; if (sc==0) sc=i; } } if (!fix) { for (int i=0; i<n; ++i) { head[s[i]]=i+1; } } else { int val=s[sc]; for (int i=sc; i<n; ++i) { head[s[i]]=val++; if (val>n) val-=n; } for (int i=0; i<sc; ++i) { head[s[i]]=val++; if (val>n) val-=n; } } hm=head[mmax]; int idx=0; for (int i=n+1; i<mmax; ++i) { if (!head[i]) { ans[idx++]=hm; hm=i; } else { ans[idx++]=head[i]; } } ans[idx]=hm; return mmax-n; } ll power(int x, int y) { if (y==0) return 1; ll a[30],ans=1; a[0]=x; for (int i=1; i<=30; ++i) a[i]=(a[i-1]*a[i-1])%mod; for (int i=0; i<=30; ++i) { if (y&(1<<i)) { ll h=(ans*a[i])%mod; ans=h; } } return ans; } int countReplacement(int n, int s[]) { if (!valid(n,s)) return 0; ll ans=1; vector<int> v; int cnt=n; for (int i=0; i<n; ++i) { if (s[i]<=n) --cnt; else v.push_back(s[i]); } if (cnt==n) { for (int i=1; i<=n; ++i) ans=(ans*i)%mod; } v.push_back(n); sort(v.begin(),v.end()); for (int i=1; i<v.size(); ++i) { ans=(ans*power(cnt,v[i]-v[i-1]-1))%mod; --cnt; } return ans; }

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

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:108:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |     for (int i=1; i<v.size(); ++i) {
      |                   ~^~~~~~~~~
gondola.cpp: In function 'll power(int, int)':
gondola.cpp:77:35: warning: iteration 29 invokes undefined behavior [-Waggressive-loop-optimizations]
   77 |     for (int i=1; i<=30; ++i) a[i]=(a[i-1]*a[i-1])%mod;
      |                               ~~~~^~~~~~~~~~~~~~~~~~~~
gondola.cpp:77:20: note: within this loop
   77 |     for (int i=1; i<=30; ++i) a[i]=(a[i-1]*a[i-1])%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...