Submission #782998

#TimeUsernameProblemLanguageResultExecution timeMemory
782998JoenPoenManStray Cat (JOI20_stray)C++17
15 / 100
50 ms18812 KiB


#include "Anthony.h"
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> ii;


std::vector<int> Mark(int N, int M, int A, int B,
                      std::vector<int> U, std::vector<int> V)
{
    vector<vector<ii>> ADJ(N);
    map<ii, int> paths;
    vector<bool> filled(M, false);
    for (int i = 0; i < M; i++) {
        ADJ[U[i]].push_back({V[i], i});
        ADJ[V[i]].push_back({U[i], i});
        paths[{U[i], V[i]}] = i;
        paths[{V[i], U[i]}] = i;
    }

    std::vector<int> X(M);
    priority_queue<ii, vector<ii>, greater<ii>> q;
    vector<int> prevNode(N, -1);
    vector<int> shortest(N, 1e8);
    shortest[0] = 0;
    q.push({0,0});
    while (!q.empty()) {
        auto [dis, pos] = q.top();
        q.pop();
        if (dis != shortest[pos]) continue;
        for (auto [conn, _] : ADJ[pos]) {
            if (dis+1 < shortest[conn]) {
                shortest[conn] = dis+1;
                prevNode[conn] = pos;
                q.push({dis+1, conn});
            }
        }
    }
    for (int p = 1; p < N; p++) {
        X[paths[{p, prevNode[p]}]] = shortest[p]%(A==2?2:3);
        filled[paths[{p, prevNode[p]}]] = true;
    }
    for (int i = 0; i < M; i++) if (!filled[i]) {
        X[i] = (min(shortest[U[i]], shortest[V[i]])+1)%(A==2?2:3);
    }
    return X;
    
}
    

    #include "Catherine.h"
    #include <bits/stdc++.h>
    using namespace std;

    namespace
    {

        int A, B;
        int prevA = 0;
        bool onPath = false;
        bool first = true;

    } // namespace

    void Init(int A, int B)
    {
        ::A = A;
        ::B = B;
    }

    int Move(std::vector<int> y)
    {
        if (A==2) {
            if (!::onPath) {
                if ((y[0]==0) ^ (y[1]==0)) {
                    if (::first) {
                        ::onPath = true;
                        ::prevA = (y[0] ? 0 : 1);
                        return (y[0] ? 0 : 1);
                    } else {
                        ::prevA = !::prevA;
                        return ::prevA;
                    }
                }
                if (y[0]==1 && y[1]==1) {
                    return 0;
                } 
                if (y[0]==0 && y[1]==0) {
                    return -1;
                }
                ::prevA = ((y[0]==1) ? 0 : 1);
            } else {
                ::prevA = !::prevA;
                return ::prevA;
            }
        } else {
            first = false;
            int corr = -1;
            for (int p = 0 ; p < y.size(); p++) if (y[p] && (corr==-1 || (corr==0&&p==2))) corr = p;
            return corr;
        }
    }

Compilation message (stderr)

Catherine.cpp: In function 'int Move(std::vector<int>)':
Catherine.cpp:51:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |             for (int p = 0 ; p < y.size(); p++) if (y[p] && (corr==-1 || (corr==0&&p==2))) corr = p;
      |                              ~~^~~~~~~~~~
Catherine.cpp:43:25: warning: control reaches end of non-void function [-Wreturn-type]
   43 |                 ::prevA = ((y[0]==1) ? 0 : 1);
      |                 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...