이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "Azer.h"
using namespace std;
typedef long long int ll;
namespace {
int n;
vector<pair<int,int>> graf[2009];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> djikstra;
int poprz=0;
int dst[2009];
int wczyt=0,ter=0,o;
pair<int,int> cel;
void napisz(int x){
for (int i=0;i<11;i++) SendA(x & (1<<i));
}
void nast(int v, int d){
dst[v] = d;
poprz = d;
for (pair<int,int> x:graf[v]){
if (dst[x.first] > d+x.second){
dst[x.first] = d+x.second;
djikstra.push({x.first,dst[x.first]});
}
}
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()) djikstra.push({1<<11-1,1});
napisz(djikstra.top().first-poprz);
o = true;
}
} // namespace
void InitA(int N, int A, vector<int> U, vector<int> V,
vector<int> C) {
n = N;
for (int x=0;x<A;x++){
graf[U[x]].push_back({V[x],C[x]});
graf[V[x]].push_back({U[x],C[x]});
}
for (int x=0;x<=n;x++) dst[x] = 1e9+9;
nast(0,0);
}
void ReceiveA(bool x) {
wczyt += (1<<ter) * x;
ter++;
if (ter==11){
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()) djikstra.push({(1<<11)-1,1});
ter = 0;
if (o){
cel.first = min(wczyt,djikstra.top().first-poprz)+poprz;
if (wczyt == djikstra.top().first && djikstra.top().first == (1<<11)-1) return;
if (wczyt >= djikstra.top().first){
napisz(djikstra.top().second);
cel.second = djikstra.top().second;
djikstra.pop();
nast(cel.first,cel.second);
}
}
else{
cel.second = wczyt;
djikstra.pop();
nast(cel.first,cel.second);
}
wczyt = 0;
}
}
vector<int> Answer() {
vector<int> odp;
for (int x=0;x<n;x++) odp.push_back(dst[x]);
return odp;
}
#include <bits/stdc++.h>
#include "Baijan.h"
using namespace std;
typedef long long int ll;
namespace {
int n;
vector<pair<int,int>> graf[2009];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> djikstra;
int poprz=0;
int dst[2009];
int wczyt=0,ter=0,o;
pair<int,int> cel;
void napisz(int x){
for (int i=0;i<11;i++) SendB(x & (1<<i));
}
void nast(int v, int d){
dst[v] = d;
poprz = d;
for (pair<int,int> x:graf[v]){
if (dst[x.first] > d+x.second){
dst[x.first] = d+x.second;
djikstra.push({x.first,dst[x.first]});
}
}
while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()) djikstra.push({(1<<11)-1,1});
napisz(djikstra.top().first-poprz);
o = true;
}
} // namespace
void InitB(int N, int B, vector<int> S, vector<int> T,
vector<int> D) {
n = N;
for (int x=0;x<B;x++){
graf[T[x]].push_back({S[x],D[x]});
graf[S[x]].push_back({T[x],D[x]});
}
for (int x=0;x<=n;x++) dst[x] = 1e9+9;
nast(0,0);
}
void ReceiveB(bool y) {
wczyt += (1<<ter) * y;
ter++;
if (ter==11){
while(dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
if (djikstra.empty()) djikstra.push({(1<<11)-1,1});
ter = 0;
if (o){
cel.first = min(wczyt,djikstra.top().first-poprz)+poprz;
if (wczyt == djikstra.top().first && djikstra.top().first == ((1<<11)-1)) return;
if (wczyt > djikstra.top().first){
napisz(djikstra.top().second);
cel.second = djikstra.top().second;
djikstra.pop();
nast(cel.first,cel.second);
}
}
else{
cel.second = wczyt;
djikstra.pop();
nast(cel.first,cel.second);
}
wczyt = 0;
}
}
컴파일 시 표준 에러 (stderr) 메시지
Azer.cpp: In function 'void {anonymous}::nast(int, int)':
Azer.cpp:29:47: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
29 | if (djikstra.empty()) djikstra.push({1<<11-1,1});
| ~~^~
Baijan.cpp: In function 'void ReceiveB(bool)':
Baijan.cpp:53:9: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
53 | while(dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
| ^~~~~
Baijan.cpp:53:81: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'while'
53 | while(dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
| ^~~~~
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |