제출 #566118

#제출 시각아이디문제언어결과실행 시간메모리
566118RealSnake저장 (Saveit) (IOI10_saveit)C++14
0 / 100
213 ms11940 KiB
#include "bits/stdc++.h" using namespace std; #include "grader.h" #include "encoder.h" void encode(int n, int h, int p, int a[], int b[]) { vector<int> v[n]; for(int i = 0; i < p; i++) { v[a[i]].push_back(b[i]); v[b[i]].push_back(a[i]); } set<int> s; s.insert(0); bool par[n] = {}; par[0] = 1; vector<int> v2[n]; while(s.size()) { int x = *s.begin(); s.erase(s.begin()); for(int i : v[x]) { if(!par[i]) { v2[x].push_back(i); par[i] = x + 1; s.insert(i); } } sort(v[x].begin(), v[x].end()); } for(int i = 0; i < n; i++) { int x = par[i] - 1; for(int j = 0; j < 10; j++) encode_bit((x & (1 << j) > 0)); } int ans[n][h]; for(int i = 0; i < n; i++) { for(int j = 0; j < h; j++) ans[i][j] = 1e9; } set<pair<int, pair<int, int>>> ss; for(int i = 0; i < h; i++) { ss.insert({0, {i, i}}); ans[i][i] = 0; } while(ss.size()) { pair<int, pair<int, int>> p = *ss.begin(); ss.erase(ss.begin()); int x = p.second.first, hub = p.second.second; int cost = p.first; if(cost > ans[x][hub]) continue; for(int i : v[x]) { if(cost + 1 < ans[i][hub]) { ans[i][hub] = cost + 1; ss.insert({cost + 1, {i, hub}}); } } } for(int i = 0; i < h; i++) { int x = ans[0][i]; for(int j = 0; j < 10; j++) encode_bit((x & (1 << j) > 0)); s.insert(0); while(s.size()) { x = *s.begin(); s.erase(s.begin()); for(int j : v2[x]) { int dif = ans[j][i] - ans[x][i]; if(dif == 0) encode_bit(0); else { encode_bit(1); if(dif == 1) encode_bit(1); else encode_bit(0); } } } } }
#include "bits/stdc++.h" using namespace std; #include "grader.h" #include "decoder.h" void decode(int n, int h) { vector<int> v[n]; for(int i = 0; i < n; i++) { int x = 0; for(int j = 0; j < 10; j++) { if(decode_bit()) x += (1 << j); } if(i != x) v[x].push_back(i); } for(int i = 0; i < h; i++) { int b[n]; b[0] = 0; for(int j = 0; j < 10; j++) { if(decode_bit()) b[0] += (1 << j); } set<int> s; s.insert(0); while(s.size()) { int x = *s.begin(); s.erase(s.begin()); hops(i, x, b[x]); for(int j : v[x]) { int dif = decode_bit(); if(dif) { if(!decode_bit()) dif = -1; } b[j] = b[x] + dif; s.insert(j); } } } }

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

encoder.cpp: In function 'void encode(int, int, int, int*, int*)':
encoder.cpp:32:38: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   32 |             encode_bit((x & (1 << j) > 0));
      |                             ~~~~~~~~~^~~
encoder.cpp:61:38: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   61 |             encode_bit((x & (1 << j) > 0));
      |                             ~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...