제출 #1369337

#제출 시각아이디문제언어결과실행 시간메모리
1369337warrennStray Cat (JOI20_stray)C++20
76 / 100
24 ms12780 KiB
#include "Anthony.h"
#include <bits/stdc++.h>
using namespace std;

namespace {
int n,m,a,b;
const int maxn=2e4;
string s;

vector<pair<int,int> >adj[maxn+2];
int dist[maxn+2];
int col[maxn+2];

}  // namespace

vector<int> Mark(int N, int M, int A, int B, vector<int> U, vector<int> V) {
  n=N,m=M,a=A,b=B;
  s="101001";

  for(int q=0;q<U.size();q++){
    adj[U[q]].push_back({V[q],q}); adj[V[q]].push_back({U[q],q});
  }
  for(int q=0;q<N;q++)dist[q]=1e9;
  dist[0]=0; col[0]=0;

  queue<pair<int,int> >qu; qu.push({0,-1});
  while(qu.size()){
    auto [cur,id]=qu.front();  qu.pop();

    for(auto [x,nxt] : adj[cur]){
      if(dist[x]>dist[cur]+1){
        dist[x]=dist[cur]+1;

        if(id==-1){
          col[nxt]=0; qu.push({x,nxt});
          continue;
        }

        if(adj[cur].size()>2){
          if(s[col[id]]=='1'){
            col[nxt]=1;
          }
          else{
            col[nxt]=0;
          }
        }
        else{
          col[nxt]=(col[id]+1)%6;
        }
        qu.push({x,nxt});
      }
    }
  }

  vector<int>ans(M);
  for(int q=0;q<M;q++){
    ans[q]=s[col[q]]-'0';
    //cout<<ans[q]<<endl;
  }

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

namespace {

int A, B;
int lst=-1;
string tmp="",s="101001101001";
bool oke=false;
}  // namespace

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

int Move(vector<int> freq) {
  int freq2[2];
  for(int q=0;q<2;q++)freq2[q]=freq[q];

  int deg=0;
  if(lst!=-1)freq2[lst]++;
  for(int q=0;q<2;q++)deg+=freq2[q];

  int ans=lst;

  if(deg==2){
    if(oke){
      for(int q=0;q<2;q++){
        if(freq[q]==1)ans=q;
      }
    }
    else{
      for(int q=0;q<2;q++){
        for(int w=0;w<freq[q];w++){
          tmp+=('0'+q);
        }
      }

      if(tmp.length()==6){
        oke=true;

        bool ul=false;
        for(int q=0;q<6;q++){
          if(s.substr(q,6)==tmp){
            ul=true;
          }
        }

        if(ul){
          ans=-1;
        }
        else{
          for(int q=0;q<2;q++){
            if(freq[q]==1)ans=q;
          }
        }
      }
      else{
        ans=tmp.back()-'0';
      }
    }
  }
  else{
    oke=true;
    for(int q=0;q<2;q++){
      if(freq2[q]==1)ans=q;
    }
    if(ans==lst)ans=-1;
  }

  if(lst==-1 && ans==-1){
    if(deg==2)assert(1==2);
  }

  if(ans!=-1)lst=ans;
  return ans;
  
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…