Submission #547232

#TimeUsernameProblemLanguageResultExecution timeMemory
547232HanksburgerGondola (IOI14_gondola)C++17
100 / 100
27 ms4516 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; const long long mod=1000000009; long long sorted[100005], pos[250005]; vector<long long> vec; long long power(long long a, long long b) { if (!b) return 1; long long res=power(a, b/2); if (b&1) return res*res%mod*a%mod; else return res*res%mod; } int valid(int n, int a[]) { for (int i=0; i<n; i++) sorted[i]=a[i]; sort(sorted, sorted+n); for (int i=1; i<n; i++) if (sorted[i-1]==sorted[i]) return 0; for (int i=0; i<n; i++) { if (a[i]<=n) { for (int j=i+1; j<i+n; j++) if (a[j%n]<=n && a[j%n]!=(a[i]+j-i-1)%n+1) return 0; return 1; } } return 1; } int replacement(int n, int a[], int b[]) { int num=1, maxi=n; for (int i=0; i<n; i++) { if (a[i]<=n) { num=(n+a[i]-i-1)%n+1; break; } } for (int i=0; i<n; i++) { maxi=max(maxi, a[i]); pos[a[i]]=i+1; } for (int i=n+1; i<=maxi; i++) { int index=i; while (!pos[i]) i++; vec.push_back((num+pos[i]-2)%n+1); for (int j=index; j<i; j++) vec.push_back(j); } for (int i=0; i<vec.size(); i++) b[i]=vec[i]; return vec.size(); } int countReplacement(int n, int a[]) { if (!valid(n, a)) return 0; long long num=0, ans=1; for (long long i=0; i<n; i++) { if (a[i]<=n) { num=(n+a[i]-i-1)%n+1; break; } } if (!num) { ans=n; num=1; } vec.push_back(n); for (long long i=0; i<n; i++) if (a[i]>n) vec.push_back(a[i]); sort(vec.begin(), vec.end()); for (long long i=1; i<vec.size(); i++) ans=(ans*power(vec.size()-i, vec[i]-vec[i-1]-1))%mod; return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:62:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |  for (int i=0; i<vec.size(); i++)
      |                ~^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:89:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |  for (long long i=1; i<vec.size(); i++)
      |                      ~^~~~~~~~~~~
#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...