이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "grader.h"
#include "encoder.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[1005];
int n,h,p[1005],dis[1005][36];
bool vis[1005];
void dfs(int x, int par) {
p[x]=par;
vis[x]=true;
for (auto s : adj[x]) if (!vis[s]) dfs(s,x);
}
void encode(int nv, int nh, int ne, int *v1, int *v2){
n=nv; h=nh;
for (int i=0; i<ne; ++i) {
adj[v1[i]].push_back(v2[i]);
adj[v2[i]].push_back(v1[i]);
}
dfs(0,0);
for (int i=1; i<n; ++i) {
for (int j=0; j<10; ++j) {
if (p[i]&(1<<j)) encode_bit(1);
else encode_bit(0);
}
}
vector<int> v;
memset(dis,-1,sizeof(dis));
for (int i=0; i<h; ++i) {
dis[i][i]=0;
queue<int> q;
q.push(i);
while (!q.empty()) {
int node=q.front();
q.pop();
for (auto s : adj[node]) {
if (dis[s][i]==-1) {
dis[s][i]=dis[node][i]+1;
q.push(s);
}
}
}
for (int j=1; j<n; ++j) v.push_back(dis[p[j]][i]-dis[j][i]+1);
}
while (v.size()%3) v.push_back(0);
for (int i=0; i<v.size(); i+=3) {
int sum=v[i]+3*v[i+1]+9*v[i+2];
for (int j=0; j<5; ++j) {
if (sum&(1<<j)) encode_bit(1);
else encode_bit(0);
}
}
}
#include "grader.h"
#include "decoder.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int nn,hh,pp[1005];
vector<int> v;
vector<pii> adjj[1005][36];
void dfs(int x, int par, int val, int gr) {
hops(gr,x,val);
for (auto s : adjj[x][gr]) {
if (s.first!=par) dfs(s.first,x,val+s.second,gr);
}
}
void decode(int nv, int nh) {
nn=nv; hh=nh;
for (int i=1; i<nn; ++i) {
int sum=0;
for (int j=0; j<10; ++j) {
if (decode_bit()==1) sum+=(1<<j);
}
pp[i]=sum;
}
for (int i=0; i<((nn-1)*hh+2)/3; ++i) {
int sum=0;
for (int j=0; j<5; ++j) if (decode_bit()==1) sum+=(1<<j);
v.push_back(sum%3-1); sum/=3;
v.push_back(sum%3-1); sum/=3;
v.push_back(sum%3-1);
}
int idx=0;
for (int i=0; i<hh; ++i) {
for (int j=1; j<nn; ++j) {
adjj[j][i].push_back({pp[j],v[idx]});
adjj[pp[j]][i].push_back({j,-v[idx]});
++idx;
}
}
for (int i=0; i<hh; ++i) dfs(i,i,0,i);
}
컴파일 시 표준 에러 (stderr) 메시지
encoder.cpp: In function 'void encode(int, int, int, int*, int*)':
encoder.cpp:54:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
54 | for (int i=0; i<v.size(); i+=3) {
| ~^~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |