LeetCode Weekly Contest 169 4問目 - Verbal Arithmetic Puzzle [1307]

Source

LeetCode Weekly Contest 169
問題文

問題概要

省略

解法

省略

cLayversion 20200214-1)のコード

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

#define main dummy_main
{}
#undef main

vector<string> w; int len[6];
int d, ind[10], use[10], lead[10];

bool solve(int ok){
  int i, j, k, t, md;

  if(ok==8) return true;

  rep(i,w.size()) if(len[i] > ok && ind[w[i][len[i]-1-ok]]==-1){
    j = w[i][len[i]-1-ok];
    rep(k,10) if(use[k]==0){
      if(lead[j] && k==0) continue;
      ind[j] = k;
      use[k] = 1;
      if(solve(ok)) return true;
      ind[j] = -1;
      use[k] = 0;
    }
    return false;
  }

  ok++;
  k = 0;
  md = 10 ** ok;
  rep(i,w.size()){
    t = 0;
    rep(j,len[i]) t = 10 t + ind[w[i][j]];
    if[i==w.size()-1, k -= t, k += t];
  }
  if(k%md) return false;

  return solve(ok);
}

class Solution {
public:
  bool isSolvable(vector<string>& words, string result) {
    int vis[26] = {};
    w = words;
    w.push_back(result);
    rep(i,w.size()) len[i] = w[i].size();
    rep(i,w.size()) rep(j,w[i].size()) vis[w[i][j]-'A'] = 1;

    d = 0;
    rep(i,26){
      if(vis[i]==0) vis[i] = -1, continue;
      vis[i] = d++;
    }
    rep(i,w.size()) rep(j,w[i].size()) w[i][j] = vis[w[i][j]-'A'];

    rep(i,d) ind[i] = -1;
    rep(i,10) use[i] = lead[i] = 0;
    rep(i,w.size()) lead[w[i][0]] = 1;

    return solve(0);
  }
};

Current time: 2024年04月26日22時43分53秒
Last modified: 2020年02月16日02時14分39秒 (by laycrs)
Tags: Competitive_Programming_Incomplete LeetCode
トップページに戻る

Logged in as: unknown user (not login)

ログイン: