제출 #592884

#제출 시각아이디문제언어결과실행 시간메모리
592884farhan132자동 인형 (IOI18_doll)C++17
53 / 100
312 ms72736 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef int ll; typedef pair<ll , ll> ii; #define ff first #define ss second #define pb push_back const ll N = 1e6 + 5; vector < ll > v[N]; vector < ll > g[N]; ll S = 0; ll col[N]; vector < ll > child; vector < ll > X,Y; void setX(ll i, ll x){ X[abs(i) - 1] = x; return; } void setY(ll i, ll y){ Y[abs(i) - 1] = y; return; } ll tot = 0; ll breakdown(ll sz){ if(sz == 2){ S--; X.pb(0); Y.pb(0); tot += 2; return S; } ll node = S - 1; S--; X.pb(0); Y.pb(0); ll n1 = breakdown(sz/2); ll n2 = breakdown(sz/2); g[-node].pb(-n1); g[-node].pb(-n2); setX(node, n1); setY(node, n2); return node; } void go(ll node, ll sz){ if(sz == 2){ child.pb(node); col[-node] ^= 1; return; } if(col[-node]) go(-g[-node][1], sz/2); else go(-g[-node][0], sz/2); col[-node] ^= 1; return; } void create_circuit(int M, std::vector<int> A) { memset(col, 0, sizeof(col)); ll n = A.size(); A.pb(0); for(ll i = 0; i < n; i++){ v[A[i]].pb(A[i + 1]); } ll m = M; vector < ll > C(m + 1); C[0] = A[0]; for(ll i = 1; i <= m; i++){ if(v[i].size() == 0){ C[i] = 0; continue; } if(v[i].size() == 1){ C[i] = v[i][0]; continue; } ll two = 1; ll d = 1; while(two * 2 < v[i].size()) two *= 2, d++; two *= 2; child.clear(); tot = 0; ll root = breakdown(two); C[i] = root; while(tot--) go(root, two); ll rem = child.size(); ll cur = 0; for(ll j = 0; j < child.size(); j++){ if(rem > v[i].size()){ if(col[-child[j]]) setY(child[j], root); else setX(child[j], root); }else{ if(col[-child[j]]) setY(child[j], v[i][cur]); else setX(child[j], v[i][cur]); cur++; } col[-child[j]] ^= 1; rem--; } } #ifdef LOCAL for(ll i = 0; i <= m; i++){ cout << C[i] << ' '; } cout << '\n'; for(ll i = 0; i < X.size(); i++){ cout << -(i + 1) << ' ' << X[i] << ' ' << Y[i] << '\n'; } #endif answer(C, X, Y); }

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

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:78:19: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     while(two * 2 < v[i].size()) two *= 2, d++;
      |           ~~~~~~~~^~~~~~~~~~~~~
doll.cpp:86:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(ll j = 0; j < child.size(); j++){
      |                   ~~^~~~~~~~~~~~~~
doll.cpp:87:14: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |       if(rem > v[i].size()){
      |          ~~~~^~~~~~~~~~~~~
#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...