제출 #974351

#제출 시각아이디문제언어결과실행 시간메모리
974351rahidilbayramliGondola (IOI14_gondola)C++17
60 / 100
26 ms5980 KiB
#include "gondola.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ll long long #define ld long double #define vl vector<ll> #define vi vector<int> #define pii pair<int, int> #define pll pair<ll, ll> #define all(v) v.begin(), v.end() #define pb push_back #define f first #define s second using namespace std; using namespace __gnu_pbds; typedef tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; const int mod = 1e9+9; int binpow(int a, int b) { int res = 1; while(b) { if(b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } //---------------------- int valid(int n, int inputSeq[]) { int nxt[n+5], v[n+5]; set<int>st; for(int i = 1; i <= n; i++) { v[i] = inputSeq[i-1]; st.insert(v[i]); } for(int i = 1; i <= n; i++) nxt[i] = (i % n) + 1; bool flag = false; for(int i = 1; i <= n; i++) { if(v[i] <= n && v[(i%n)+1] <= n && nxt[v[i]] != v[(i%n)+1]) flag = true; } if(flag || st.size() < n) return 0; return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int v[n+5]; int flag = 0; for(int i = 1; i <= n; i++){ v[i] = gondolaSeq[i-1]; if(v[i] <= n) flag = 1; } if(!flag) { vector<pii>vect; for(int i = 1; i <= n; i++) vect.pb({v[i], i}); sort(all(vect)); int last = n + 1, idx = 0; for(int i = 0; i < n; i++) { replacementSeq[idx] = vect[i].s; idx++; for(int j = last; j < vect[i].f; j++) { replacementSeq[idx] = j; idx++; } last = vect[i].f + 1; } return idx; } else { vector<pii>vect; int idx; for(int i = 1; i <= n; i++) { if(v[i] <= n && v[i] >= 1){ idx = i; break; } } vect.pb({v[idx], v[idx]}); int idxt = v[idx]; for(int i = idx + 1; i <= n; i++) { idxt++; if(idxt == n + 1) idxt = 1; vect.pb({v[i], idxt}); } idxt = v[idx]; for(int i = idx - 1; i >= 1; i--) { idxt--; if(idxt == 0) idxt = n; vect.pb({v[i], idxt}); } sort(all(vect)); int last = n + 1; idx = 0; for(int i = 0; i < n; i++) { if(vect[i].f > n){ replacementSeq[idx] = vect[i].s; idx++; } for(int j = last; j < vect[i].f; j++) { replacementSeq[idx] = j; idx++; } last = max(last, vect[i].f + 1); } return idx; } } //---------------------- int countReplacement(int n, int inputSeq[]) { int k = valid(n, inputSeq); if(k == 0) return 0; else { int v[n+5], cnt = 0; bool flag1 = false, flag2 = false; vi vect; for(int i = 1; i <= n; i++) v[i] = inputSeq[i-1]; for(int i = 1; i <= n; i++) { if(v[i] > n) { vect.pb(v[i]); flag1 = true; cnt++; } if(v[i] <= n) flag2 = true; } ll h = 1; if(!flag2) h = n; sort(all(vect)); int lst = n + 1; for(int i = 0; i < vect.size(); i++) { int diff = vect[i] - lst; int p = binpow(cnt, diff); h *= p; h %= mod; cnt--; lst = vect[i] + 1; } return (int)(h); } }

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:51:26: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   51 |     if(flag || st.size() < n)
      |                ~~~~~~~~~~^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:165:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  165 |         for(int i = 0; i < vect.size(); i++)
      |                        ~~^~~~~~~~~~~~~
gondola.cpp:145:14: warning: variable 'flag1' set but not used [-Wunused-but-set-variable]
  145 |         bool flag1 = false, flag2 = false;
      |              ^~~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:108:17: warning: 'idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
  108 |         for(int i = idx - 1; i >= 1; 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...