AtCoder Beginner Contest 138 F問題 - Coincidence

Source

AtCoder Beginner Contest 138
問題文

問題概要

省略

解法

省略

cLayversion 20190820-1)のコード

C++に変換後のコードはこちら

int L[64], R[64];

int vis[64][2][2][2];
mint dp[64][2][2][2];

mint solve(int dep, int u, int Lf, int Rf){
  int n_u, n_Lf, n_Rf;
  mint res;

  if(dep < 0) return 1;
  if(vis[dep][u][Lf][Rf]) return dp[dep][u][Lf][Rf];
  vis[dep][u][Lf][Rf] = 1;

  res = 0;

  if(R[dep] == 1 || Rf == 1){
    n_Lf = Lf;
    if(L[dep] == 0) n_Lf = 1;
    res += solve(dep-1, 1, n_Lf, Rf);
  }
  if(L[dep] == 0 || Lf == 1){
    n_Rf = Rf;
    if(R[dep] == 1) n_Rf = 1;
    res += solve(dep-1, u, Lf, n_Rf);
  }
  if(u==1 && (R[dep]==1 || Rf==1) && (L[dep]==0 || Lf==1)){
    res += solve(dep-1, 1, Lf, Rf);
  }

  return dp[dep][u][Lf][Rf] = res;
}

{
  ll x;
  mint res;

  rd(x);
  rep(i,64) L[i] = x%2, x /= 2;
  rd(x);
  rep(i,64) R[i] = x%2, x /= 2;

  res = solve(63, 0, 0, 0);
  wt(res);
}

Current time: 2024年03月30日00時55分22秒
Last modified: 2019年08月22日01時05分21秒 (by laycrs)
Tags: Competitive_Programming_Incomplete AtCoder AtCoder_Beginner_Contest ABC138 ABC_F
トップページに戻る

Logged in as: unknown user (not login)

ログイン: