Submission #764495

#TimeUsernameProblemLanguageResultExecution timeMemory
764495ngraceStray Cat (JOI20_stray)C++14
100 / 100
39 ms16108 KiB
#include <bits/stdc++.h>
#include "Anthony.h"
using namespace std;
#define v vector
#define ii pair<int,int>
#define fi first
#define se second

namespace {

int FunctionExample(int i, int A) {
  return i % A;
}

}  // namespace

std::vector<int> Mark(int N, int M, int A, int B,
                      std::vector<int> U, std::vector<int> V) {
  std::vector<int> X(M);
  for (int i = 0; i < M; ++i) {
    X[i] = -1;//FunctionExample(i, A);
  }

  v<int> seq = {1,0,1,1,0,0};

  v<v<ii>> adj(N);
  for(int i=0; i<M; i++){
    adj[U[i]].push_back({V[i],i});
    adj[V[i]].push_back({U[i],i});
  }

  queue<ii> q;
  v<bool> vis(N,false);
  q.push({0,0});
  while(q.size()>0){
    int cur=q.front().fi;
    int dep=q.front().se;
    q.pop();

    if(vis[cur]) continue;
    vis[cur]=true;

    int last=-1;
    int lastind=-1;
    for(ii it:adj[cur]){
      if(X[it.se]!=-1){
        last=X[it.se];
        lastind=it.se;
      }
    }

    if(A>2){
      for(ii it:adj[cur]){
        if(!vis[it.fi]) X[it.se] = dep%3;
      }
    }
    else if(cur==0){
      for(ii it:adj[cur]) X[it.se] = seq[0];
    }else{
      if(adj[cur].size()>2){
        for(ii it:adj[cur]){
          if(it.se!=lastind) X[it.se] = (last+1)%2;
          if(last==1) dep=1;
          else dep=0;
        }
      } else{
        for(ii it:adj[cur]){
          if(it.se!=lastind) X[it.se] = seq[dep%6];
        }
      }
    }

    for(ii it:adj[cur]){
      if(!vis[it.fi]) q.push({it.fi, dep+1});
    }
  }

  //for(int i:X) cout<<i<<" ";
  //cout<<endl;

  return X;
}
#include <bits/stdc++.h>
#include "Catherine.h"
using namespace std;
#define v vector
#define ii pair<int,int>
#define fi first
#define se second

namespace {

int A, B;
int lastmark = -1;
v<int> seq = {0,0,1,1,0,1};
v<int> moves;
bool allgood = false;

}  // namespace

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

int Move(std::vector<int> y) {
  if(A>2){
    if(lastmark==-1){
      if(y[0]==y[1] && y[0]==0) return lastmark=2;
      else if(y[1]==y[2] && y[1]==0) return lastmark=0;
      else if(y[2]==y[0] && y[0]==0) return lastmark=1;
    } else y[lastmark]++;
    //cout<<lastmark<<" "<<y[0]<<" "<<y[1]<<" "<<y[2]<<endl;
    if(y[0]>0 && y[1]>0) return lastmark = 0;
    else if(y[1]>0&&y[2]>0) return lastmark=1;
    else return lastmark=2;
  }

  int numedge=y[0]+y[1] + (lastmark!=-1);
  
  //cout<<y[0]<<" "<<y[1]<<" "<<lastmark<<endl;

  if(lastmark==-1){
    if(numedge>2){
      allgood=true;
      lastmark = (y[0]>y[1]) ? 1 : 0;
      return lastmark;
    } else if(numedge==1){
      allgood=true;
      lastmark = (y[0]>0) ? 0 : 1;
      return lastmark;
    } 
    else{
      lastmark = (y[0]>0) ? 0 : 1;
      //cout<<"?"<<y[0]<<" "<<y[1]<<" "<<lastmark<<endl;
      moves.push_back((y[lastmark]>1) ? lastmark : (lastmark+1)%2);
      moves.push_back(lastmark);
      return lastmark;
    }
  } 

  
  if(numedge>2){
    int old=lastmark;
    y[lastmark]++;
    lastmark = (y[0]>y[1]) ? 1 : 0;
    allgood=true;
    return (old==lastmark) ? -1 : lastmark;
  }

  if(numedge==1){
    allgood=true;
    return -1;
  }

  if(allgood){
    lastmark = (y[0]==1) ? 0 : 1;
    return lastmark;
  }

  if(moves.size()==4){
    //cout<<"!"<<moves[0]<<" "<<moves[1]<<" "<<moves[2]<<" "<<moves[3]<<endl;
    bool found=false;
    int next=-1;
    for(int i=0; i<6; i++){
      if(moves[0]==seq[i] && moves[1]==seq[(i+1)%6] && moves[2]==seq[(i+2)%6] && moves[3]==seq[(i+3)%6]){
        found=true;
        next=seq[(i+4)%6];
      }
    }
    if(!found || y[next]==0){
      allgood=true;
      return -1;
    }
  }

  lastmark = (y[0]==1) ? 0 : 1;
  moves.push_back(lastmark);
  return lastmark;
}

Compilation message (stderr)

Anthony.cpp:11:5: warning: 'int {anonymous}::FunctionExample(int, int)' defined but not used [-Wunused-function]
   11 | int FunctionExample(int i, int A) {
      |     ^~~~~~~~~~~~~~~
#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...