Submission #250675

#TimeUsernameProblemLanguageResultExecution timeMemory
250675hhh07Gondola (IOI14_gondola)C++14
60 / 100
22 ms4352 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <utility> #include <set> #include <cmath> #include <climits> #include <cstring> #include <stdio.h> #include <assert.h> #include "gondola.h" using namespace std; typedef long long ll; typedef vector<ll> vi; typedef pair<ll, ll> ii; ll MOD = 1e9 + 9; ll stepen(int x, int st){ ll res = 1; for (int i = 1; i <= st; i++){ res *= x; res %= MOD; if (i*2 <= st){ i *= 2; res *= res; res %= MOD; } else{ res *= stepen(x, st - i); res %= MOD; break; } } return res; } int valid(int n, int x[]){ int j = -1; for (int i = 0; i < n; i++){ if (x[i] > n) continue; j = i; break; } vector<bool> visited(250001, 0); for (int i = 0; i < n; i++){ if (visited[x[i]]) return false; visited[x[i]] = true; if (j > i){ int moze = x[j] - (j - i); if (moze < 1) moze += n; if (x[i] <= n && moze != x[i]){ return false; } } else{ int moze = x[j] + (i - j); if (moze > n) moze -= n; if (x[i] <= n && moze != x[i]){ return false; } } } return true; } int replacement(int n, int x[], int y[]){ vector<ii> t; vi visited(250001, false); int j = 0; for (int i = 0; i < n; i++){ visited[x[i]] = true; if (x[i] > n) t.push_back(make_pair(x[i], i)); else j = i; } sort(t.begin(), t.end()); for (int i = 0; i < n; i++){ if (j > i){ int moze = x[j] - (j - i); if (moze < 1) moze += n; x[i] = moze; } else{ int moze = x[j] + (i - j); if (moze > n) moze -= n; x[i] = moze; } } vi res; vi a(250001, 0); for (int i = 0; i < t.size(); i++) a[x[t[i].second]] = true; for (int i = 0; i < t.size(); i++){ int curr = t[i].first, idx = t[i].second; res.push_back(x[idx]); for (int j = x[idx] + 1; j <= curr; j++){ if (!visited[j] && !a[j]) res.push_back(j); visited[j] = true; } visited[curr] = true; } for (int i = 0; i < res.size(); i++) y[i] = res[i]; return res.size(); } int countReplacement(int n, int x[]){ bool k = valid(n, x); if (!k) return 0; vi t; for (int i = 0; i < n; i++) if (x[i] > n) t.push_back(x[i]); sort(t.begin(), t.end()); ll res = 1; int prev = n; for (int i = 0; i < t.size(); i++){ res *= stepen(t.size() - i, t[i] - prev - 1); res = res%MOD; prev = t[i]; } if (t.size() == n){ res *= n; res = res%MOD; } return res; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:103:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < t.size(); i++)
                     ~~^~~~~~~~~~
gondola.cpp:105:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < t.size(); i++){
                     ~~^~~~~~~~~~
gondola.cpp:115:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < res.size(); i++)
                     ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:133:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < t.size(); i++){
                     ~~^~~~~~~~~~
gondola.cpp:138:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (t.size() == n){
         ~~~~~~~~~^~~~
#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...