제출 #292145

#제출 시각아이디문제언어결과실행 시간메모리
292145mat_v곤돌라 (IOI14_gondola)C++14
60 / 100
26 ms2384 KiB
#include "gondola.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i)) #define fb(i,a,b) for(int (i) = (a); (i) >= (b); --(i)) #define mod 1000000009 #define xx first #define yy second #define all(a) (a).begin(), (a).end() #define pb push_back #define ll long long #define pii pair<int,int> using namespace std; using namespace __gnu_pbds; typedef tree<int, null_type, less<int>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;/// find_by_order(x)(x+1th) , order_of_key() (strictly less) mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); int tmp[250005]; int valid(int n, int inputSeq[]) { vector<int> svi; ff(i,0,n - 1)svi.pb(inputSeq[i]); sort(svi.begin(), svi.end()); ff(i,0,n - 2)if(svi[i] == svi[i + 1])return 0; int gde = -1; ff(i,0,n - 1){ if(inputSeq[i] <= n){ gde = i; break; } } if(gde == -1)return 1; ff(i,gde,gde+n-1){ tmp[i%n] = inputSeq[gde] + i - gde; if(tmp[i%n] > n)tmp[i%n] -= n; } ff(i,0,n - 1){ if(inputSeq[i] <= n && inputSeq[i] != tmp[i])return 0; } return 1; } //---------------------- int niz[250005]; bool use[250005]; int poz[250005]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { ff(i,0,n - 1)niz[i] = gondolaSeq[i]; int gde = 0; int val = 1; ff(i,0,n - 1){ if(niz[i] <= n){ gde = i; val = niz[i]; break; } } ff(i,gde,gde+n-1){ tmp[i%n] = val + i - gde; if(tmp[i%n] > n)tmp[i%n] -= n; } //ff(i,0,n - 1)cout << tmp[i] << " "; int tr = n+1; priority_queue<pii>pq; ff(i,0,n - 1){ if(niz[i] > n){ pq.push({-niz[i], i}); } } vector<int> sol; while(!pq.empty()){ pii sta = pq.top(); pq.pop(); int koji = sta.yy; int broj = -sta.xx; while(tr <= broj){ sol.pb(tmp[koji]); tmp[koji] = tr; tr++; } } int m = sol.size(); ff(i,0,m - 1){ replacementSeq[i] = sol[i]; } return m; } //---------------------- ll add(ll x, ll y){ return (x + y) % mod; } ll mul(ll x, ll y){ return (x * y) % mod; } ll power(ll x, ll y){ if(y == 0)return 1; ll pola = power(x, y/2); pola = mul(pola, pola); if(y%2 == 1)pola = mul(pola, x); return pola; } int countReplacement(int n, int inputSeq[]){ if(valid(n, inputSeq) == 0)return 0; sort(inputSeq, inputSeq + n); ll pom = 1; pom = n; ff(i,0,n - 1)if(inputSeq[i] <= n)pom = 1; int tr = n+1; ll ans = 1; int poc = 0; while(poc < n && inputSeq[poc] <= n)poc++; ff(i,poc,n - 1){ ll kol = n - poc; ll raz = inputSeq[i] - tr; ans = mul(ans, power(kol, raz)); tr = inputSeq[i] + 1; } ans = mul(ans, pom); return ans; }

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:28:5: note: in expansion of macro 'ff'
   28 |     ff(i,0,n - 1)svi.pb(inputSeq[i]);
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:30:5: note: in expansion of macro 'ff'
   30 |     ff(i,0,n - 2)if(svi[i] == svi[i + 1])return 0;
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:33:5: note: in expansion of macro 'ff'
   33 |     ff(i,0,n - 1){
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:40:5: note: in expansion of macro 'ff'
   40 |     ff(i,gde,gde+n-1){
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:44:5: note: in expansion of macro 'ff'
   44 |     ff(i,0,n - 1){
      |     ^~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:58:5: note: in expansion of macro 'ff'
   58 |     ff(i,0,n - 1)niz[i] = gondolaSeq[i];
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:61:5: note: in expansion of macro 'ff'
   61 |     ff(i,0,n - 1){
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:68:5: note: in expansion of macro 'ff'
   68 |     ff(i,gde,gde+n-1){
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:75:5: note: in expansion of macro 'ff'
   75 |     ff(i,0,n - 1){
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:93:5: note: in expansion of macro 'ff'
   93 |     ff(i,0,m - 1){
      |     ^~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:121:5: note: in expansion of macro 'ff'
  121 |     ff(i,0,n - 1)if(inputSeq[i] <= n)pom = 1;
      |     ^~
gondola.cpp:7:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
    7 | #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i))
      |                           ^
gondola.cpp:126:5: note: in expansion of macro 'ff'
  126 |     ff(i,poc,n - 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...