LeetCode Weekly Contest 169
問題文
省略
省略
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)