Submission #775218

#TimeUsernameProblemLanguageResultExecution timeMemory
775218danikoynovGondola (IOI14_gondola)C++14
90 / 100
43 ms13760 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn = 3e5 + 10; ll cnt[maxn]; int valid(int n, int inputSeq[]) { for (ll i = 0; i < n; i ++) { ll val = inputSeq[(i + 1) % n]; if (inputSeq[i] == n && val == 1) continue; if (val != inputSeq[i] + 1) { ///cout << i << endl; ///cout << inputSeq[i] << " " << val << endl; return 0; } } return 1; } //---------------------- ll order[maxn], to_go[maxn]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { ll pivot = 0; while(pivot < n && gondolaSeq[pivot] > n) pivot ++; if (pivot == n) { pivot = 0; for (ll i = 0; i < n; i ++) order[i] = gondolaSeq[i]; } else { order[gondolaSeq[pivot] - 1] = gondolaSeq[pivot]; for (ll i = pivot + 1; i < n + pivot; i ++) { order[(gondolaSeq[pivot] - 1 + (i - pivot)) % n] = gondolaSeq[i % n]; } } ///for (ll i = 0; i < n; i ++) ///cout << order[i] << " "; /// cout << endl; ll mx = 0, pt = 0; for (ll i = 0; i < n; i ++) { if (order[i] > n) { if (order[i] > mx) { mx = order[i]; pt = i + 1; } to_go[order[i]] = i + 1; } } ///cout << mx << " " << pt << endl; ll idx = 0, last_free = pt; for (ll i = n + 1; i <= mx; i ++) { if (to_go[i] != 0) { if (to_go[i] == pt) replacementSeq[idx ++] = last_free; else replacementSeq[idx ++] = to_go[i]; } else { replacementSeq[idx ++] = last_free; last_free = i; } } return max((ll)0, mx - n); } //---------------------- const ll mod = 1e9 + 9; int countReplacement(int n, int inputSeq[]) { map < ll, ll > mp; for (ll i = 0; i < n; i ++) { if (mp[inputSeq[i]] != 0) return 0; mp[inputSeq[i]] = 1; } ll pivot = 0; while(pivot < n && inputSeq[pivot] > n) pivot ++; if (pivot == n) { pivot = 0; for (ll i = 0; i < n; i ++) order[i] = inputSeq[i]; } else { order[inputSeq[pivot] - 1] = inputSeq[pivot]; for (ll i = pivot + 1; i < n + pivot; i ++) { order[(inputSeq[pivot] - 1 + (i - pivot)) % n] = inputSeq[i % n]; } } /**for (ll i = 0; i < n; i ++) cout << order[i] << " "; cout << endl;*/ ll mx = 0, pt = 0; for (ll i = 0; i < n; i ++) { if (order[i] > n) { if (order[i] > mx) { mx = order[i]; pt = i + 1; } to_go[order[i]] = i + 1; } } ///cout << mx << " " << pt << endl; ll sp = 0; for (ll i = 0; i < n; i ++) if (order[i] > n) sp ++; //cout << sp << endl; ll idx = 0, last_free = pt; ll ways = 1; if (sp == n) ways = n; for (ll i = n + 1; i <= mx; i ++) { if (ways == 0) return 0; if (to_go[i] != 0) { sp --; //if (to_go[i] == pt) // replacementSeq[idx ++] = last_free; //else /// replacementSeq[idx ++] = to_go[i]; } else { ///cout << i << " : " << sp << " " << ways << endl; ways = (ways * sp) % mod; ///replacementSeq[idx ++] = last_free; ///last_free = i; } } return ways; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:145:8: warning: unused variable 'idx' [-Wunused-variable]
  145 |     ll idx = 0, last_free = pt;
      |        ^~~
gondola.cpp:145:17: warning: unused variable 'last_free' [-Wunused-variable]
  145 |     ll idx = 0, last_free = pt;
      |                 ^~~~~~~~~
#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...