답안 #762201

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
762201 2023-06-21T04:31:04 Z Piokemon Two Transportations (JOI19_transportations) C++17
0 / 100
260 ms 684 KB
    #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;
    pair<int,int> cel;
    int nr=0;
    bool apuste=0,bpuste=0;
     
    void napisz(int x){
        for (int i=0;i<11;i++) SendA(x & (1<<i));
    }
     
    void nast(int v, int d){
        //if (nr<10) cout << "A:" << v << ' ' << d << '\n';
        if (dst[v] < d){
            poprz = d;
            while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
            if (djikstra.empty()){
                apuste = 1;
                napisz((1<<11)-1);
                napisz(1);
                nr++;
                return;
            }
            else apuste=0;
            napisz(djikstra.top().first-poprz);
            napisz(djikstra.top().second);
            nr++;
            return;
        }
        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({dst[x.first],x.first});
            }
        }
        while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
        if (djikstra.empty()){
            apuste = 1;
            napisz((1<<11)-1);
            napisz(1);
            nr++;
            return;
            //if (nr<10) cout << "A empty\n";
        }
        else apuste=0;
        //if (nr<10) cout << "A->B " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
        napisz(djikstra.top().first-poprz);
        napisz(djikstra.top().second);
        nr++;
    }
     
    }  // 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);
        cel = {-1,-1};
    }
     
    void ReceiveA(bool x) {
        wczyt += (1<<ter) * x;
        ter++;
        if (ter==11){
            if (cel.second == -1){
                cel.second = wczyt + poprz;
                if (wczyt == (1<<11)-1) bpuste=1;
                else bpuste = 0;
            }
            else{
                cel.first = wczyt;
                //if (nr<10) cout << "A ma:" << djikstra.top().first << ' ' << cel.second << '\n';
                //if (nr<10) cout << "A dostalo: " << cel.first << ' ' << cel.second << '\n';
                //if (nr<10) cout << "A twierdzi o empt:  " << apuste << ' ' << bpuste << '\n';
                if (nr>n) return;
                if (apuste && bpuste) return;
                if (!apuste && (djikstra.top().first < cel.second || bpuste)){
                    cel.second = djikstra.top().first;
                    cel.first = djikstra.top().second;
                    djikstra.pop();
                    //if (nr<10) cout << "hi\n";
                }
                nast(cel.first,cel.second);
                cel = {-1,-1};
            }
            ter = 0;
            wczyt = 0;
        }
    }
     
    vector<int> Answer() {
        vector<int> odp;
        for (int x=0;x<n;x++) odp.push_back(dst[x]);
        return odp;
    }
    #include "Baijan.h"
    #include <bits/stdc++.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;
    pair<int,int> cel;
    pair<int,int> wczes;
    int nr=0;
    bool apuste=0,bpuste=0;
     
    void napisz(int x){
        for (int i=0;i<11;i++) SendB(x & (1<<i));
    }
     
    void nast(int v, int d){
        if (dst[v]<d){
            poprz = d;
            while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
            if (djikstra.empty()){
                bpuste = 1;
                napisz((1<<11)-1);
                napisz(1);
                nr++;
                //if (nr<10) cout << "B empty\n";
                return;
            }
            else bpuste=0;
            //if (nr<10) cout << "B->A " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
            napisz(djikstra.top().first-poprz);
            napisz(djikstra.top().second);
            nr++;
            return;
        }
        //if (nr<10) cout << "B:" << v << ' ' << d << '\n';
        dst[v] = d;
        poprz = d;
        //if (nr<10) cout << "lelum " << poprz << ' ' << d << '\n';
        for (pair<int,int> x:graf[v]){
            if (dst[x.first] > d+x.second){
                dst[x.first] = d+x.second;
                djikstra.push({dst[x.first],x.first});
            }
        }
        while(!djikstra.empty() && dst[djikstra.top().second] < djikstra.top().first) djikstra.pop();
        if (djikstra.empty()){
            bpuste = 1;
            napisz((1<<11)-1);
            napisz(1);
            nr++;
            //if (nr<10) cout << "B empty\n";
            return;
        }
        else bpuste=0;
        //if (nr<10) cout << "B->A " << djikstra.top().first-poprz << ' ' << djikstra.top().second << '\n';
        napisz(djikstra.top().first-poprz);
        napisz(djikstra.top().second);
        nr++;
    }
     
    }  // 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;
        cel = {-1,-1};
        wczes = {0,0};
    }
     
    void ReceiveB(bool y) {
        wczyt += (1<<ter) * y;
        ter++;
        if (ter==11){
            if (cel.second == -1){
                cel.second = wczyt;
                if (cel.second == (1<<11)-1) apuste=1;
                else apuste=0;
            }
            else{
                if (nr>n) return;
                //if (nr<10) cout << "B jestem debilem: " << poprz << '\n';
                nast(wczes.first,wczes.second);
                cel.second += poprz;
                cel.first = wczyt;
                //if (nr<10) cout << "B dostalo: " << cel.first << ' ' << cel.second << '\n';
                //if (nr<10) cout << "nr 2: " << apuste << ' ' << bpuste << '\n';
                if (apuste && bpuste) return;
                if (!bpuste && (djikstra.top().first < cel.second || apuste)){
                    cel.second = djikstra.top().first;
                    cel.first = djikstra.top().second;
                    djikstra.pop();
                }
                wczes = cel;
                cel = {-1,-1};
            }
            ter = 0;
            wczyt = 0;
        }
    }
# 결과 실행 시간 메모리 Grader output
1 Runtime error 244 ms 332 KB Execution killed with signal 13
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 656 KB Output is correct
2 Runtime error 227 ms 416 KB Execution killed with signal 13
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 228 ms 400 KB Execution killed with signal 13
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 260 ms 684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 260 ms 684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 260 ms 684 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 244 ms 332 KB Execution killed with signal 13
2 Halted 0 ms 0 KB -