Submission #1151330

#TimeUsernameProblemLanguageResultExecution timeMemory
1151330byunjaewooStray Cat (JOI20_stray)C++20
15 / 100
31 ms13896 KiB
#include "Anthony.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
  const int N=20010, INF=1e9;
  int a[6]={0, 1, 1, 0, 0, 1};
  int dist[N];
  vector<pair<int, int>> adj[N];
  queue<int> q;
}

vector<int> Mark(int N, int M, int A, int B, vector<int> U, vector<int> V) {
  for(int i=0; i<M; i++) adj[U[i]].push_back({V[i], i}), adj[V[i]].push_back({U[i], i});
  if(A>=3) {
    q.push(0), fill(dist+1, dist+N, INF);
    vector<int> ret(M, 0);
    int cnt=0;
    while(!q.empty()) {
      int curr=q.front(); q.pop();
      for(auto [next, k]:adj[curr]) {
        if(dist[next]>dist[curr]+1) dist[next]=dist[curr]+1, q.push(next);
        if(dist[next]>=dist[curr]) ret[k]=dist[curr]%3;
      }
    }
    return ret;
  }
  vector<int> ret(M, 0);
  function<void(int, int, int)> dfs=[&](int curr, int prev, int x) {
    for(auto [next, k]:adj[curr]) if(next!=prev) {
      if(adj[curr].size()+(curr==0)==2) ret[k]=(x+1)%6;
      else ret[k]=1-a[x];
      dfs(next, curr, ret[k]);
    }
  };
  dfs(0, -1, 1);
  for(int i=0; i<M; i++) ret[i]=a[ret[i]];
  return ret;
}
#include "Catherine.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
  int A, B, cnt, lst, dir=-1;
  int a[6]={0, 1, 1, 0, 0, 1}, x[5];
}

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

int Move(vector<int> y) {
  if(A>=3) {
    for(int i=0; i<3; i++) if(y[i] && y[(i+1)%3]) return i;
    for(int i=0; i<3; i++) if(y[i]) return i;
  }
  if(dir<0) {
    if(y[0]+y[1]==0) {
      dir=lst; return -1;
    }
    if(y[0]+y[1]>=2+(!cnt)) {
      dir=(y[0]>y[1]); return dir;
    }
    if(!cnt) {
      x[0]=(y[1]>0), lst=x[1]=(y[1]>1);
      return x[1];
    }
    if(cnt==1) {
      lst=x[2]=y[1]; return x[2];
    }
    if(cnt==2) {
      lst=x[3]=y[1]; return x[3];
    }
    x[4]=y[1];
    for(int i=0; i<6; i++) {
      bool flag=true;
      for(int j=0; j<5; j++) flag&=(a[(i+j)%6]==x[j]);
      if(flag) {
        dir=lst; return -1;
      }
    }
    dir=y[1]; return dir;
  }
  else {
    if(y[0]+y[1]==1) dir=y[1];
    else dir=!dir;
    return dir;
  }
}
#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...