제출 #1138300

#제출 시각아이디문제언어결과실행 시간메모리
1138300KhoaDuy길고양이 (JOI20_stray)C++20
0 / 100
25 ms8772 KiB
#include "Anthony.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> pat={0,1,0,0,1,1};
vector<vector<pair<int,int>>> graph;
void DFS(int u,int p,vector<int> &val,int last){
    if(graph[u].size()==2){
        for(pair<int,int> &x:graph[u]){
            int v=x.first,idx=x.second;
            if(v!=p){
                val[idx]=pat[(last+1)%pat.size()];
                DFS(v,u,val,(last+1)%pat.size());
            }
        }
    }
    else{
        for(pair<int,int> &x:graph[u]){
            int v=x.first,idx=x.second;
            if(v!=p){
                val[idx]=(pat[last]^1);
                DFS(v,u,val,val[idx]);
            }
        }
    }
}
vector<int> Mark(int n,int m,int a,int b,vector<int> e1,vector<int> e2){
    if(b==0){
        return {};
    }
    graph.clear();
    graph.resize(n);
    for(int i=0;i<m;i++){
        graph[e1[i]].push_back({e2[i],i});
        graph[e2[i]].push_back({e1[i],i});
    }
    vector<int> val(m);
    DFS(0,-1,val,5);
    return val;
}
#include "Catherine.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> pat={0,1,0,0,1,1};
int a,b;
int last=-1;
vector<int> seq;
bool know=false;
void Init(int A,int B){
    seq.clear();
    seq.resize(0);
    know=false;
    last=-1;
    a=A,b=B;
}
int Move(vector<int> y){
    if(b==0){
        return -1;
    }
    int deg=(last!=-1);
    for(int i=0;i<a;i++){
        deg+=y[i];
    }
    if(deg==2){
        if(know){
            for(int i=0;i<a;i++){
                if(y[i]>0){
                    last=i;
                    return i;
                }
            }
        }
        for(int i=0;i<a;i++){
            for(int j=0;j<y[i];j++){
                seq.push_back(i);
            }
        }
        if(seq.size()==5){
            bool wrong=false;
            for(int i=0;i<pat.size();i++){
                bool flag=true;
                for(int j=0;j<seq.size();j++){
                    if(seq[j]!=pat[(i+j)%pat.size()]){
                        flag=false;
                        break;
                    }
                }
                if(flag){
                    wrong=true;
                    break;
                }
            }
            seq.clear();
            seq.resize(0);
            know=true;
            if(wrong){
                return -1;
            }
            last=seq.back();
            return seq.back();
        }
        last=seq.back();
        return last;
    }
    else{
        if(last!=-1){
            y[last]++;
        }
        int Minidx=0;
        for(int i=1;i<a;i++){
            if(y[i]<y[Minidx]){
                Minidx=i;
            }
        }
        know=true;
        if(last==Minidx){
            return -1;
        }
        last=Minidx;
        return Minidx;
    }
}
#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...