Submission #775194

#TimeUsernameProblemLanguageResultExecution timeMemory
775194danikoynovGondola (IOI14_gondola)C++14
60 / 100
14 ms2644 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; const int maxn = 3e5 + 10; int cnt[maxn]; int valid(int n, int inputSeq[]) { for (int i = 0; i < n; i ++) { int 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; } //---------------------- int order[maxn], to_go[maxn]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int pivot = 0; while(pivot < n && gondolaSeq[pivot] > n) pivot ++; if (pivot == n) { pivot = 0; for (int i = 0; i < n; i ++) order[i] = gondolaSeq[i]; } else { order[gondolaSeq[pivot] - 1] = gondolaSeq[pivot]; for (int i = pivot + 1; i < n + pivot; i ++) { order[(gondolaSeq[pivot] - 1 + (i - pivot)) % n] = gondolaSeq[i % n]; } } ///for (int i = 0; i < n; i ++) ///cout << order[i] << " "; /// cout << endl; int mx = 0, pt = 0; for (int 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; int idx = 0, last_free = pt; for (int 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(0, mx - n); } //---------------------- typedef long long ll; const ll mod = 1e9 + 7; int countReplacement(int n, int inputSeq[]) { map < int, int > mp; for (int i = 0; i < n; i ++) { if (mp[inputSeq[i]] != 0) return 0; mp[inputSeq[i]] = 1; } int pivot = 0; while(pivot < n && inputSeq[pivot] > n) pivot ++; if (pivot == n) { pivot = 0; for (int i = 0; i < n; i ++) order[i] = inputSeq[i]; } else { order[inputSeq[pivot] - 1] = inputSeq[pivot]; for (int i = pivot + 1; i < n + pivot; i ++) { order[(inputSeq[pivot] - 1 + (i - pivot)) % n] = inputSeq[i % n]; } } ///for (int i = 0; i < n; i ++) ///cout << order[i] << " "; /// cout << endl; int mx = 0, pt = 0; for (int 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 (int i = 0; i < n; i ++) if (order[i] > n) sp ++; //cout << sp << endl; int idx = 0, last_free = pt, ways = 1; if (sp == n) ways = n; for (int 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 { 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:143:9: warning: unused variable 'idx' [-Wunused-variable]
  143 |     int idx = 0, last_free = pt, ways = 1;
      |         ^~~
gondola.cpp:143:18: warning: unused variable 'last_free' [-Wunused-variable]
  143 |     int idx = 0, last_free = pt, ways = 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...