#include<bits/stdc++.h>
#define inf 0x3fffffff
#define endl '\n'
using namespace std;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int a, b;
cin >> a >> b;
string sa, sb;
sa = to_string(a);
sb = to_string(b);
int lena = sa.length();
int lenb = sb.length();
int ans = inf;
for (int i = 1; i <= ((1 << lena) - 1); i++) {
int pa = 0;
int needa = lena;
for (int k = 0; k < lena; k++) {
if ((i >> k) & 1) {
pa *= 10;
pa += sa[k] - '0';
needa--;
}
}
for (int j = 1; j <= ((1 << lenb) - 1); j++) {
int pb = 0;
int needb = lenb;
for (int k = 0; k < lenb; k++) {
if ((j >> k) & 1) {
pb *= 10;
pb += sb[k] - '0';
needb--;
}
}
//cout << pa << ' ' << pb << ' ' << needa+needb << endl;
if(pa % pb == 0 || pb % pa == 0) {
ans = min(ans,needa+needb);
}
}
}
if(ans == inf) {
cout << -1 << endl;
} else {
cout << ans << endl;
}
}
很简单的状态压缩入门题,只要用位运算枚举每一种状态就好了,注意特判-1的情况,复杂度为2^(len(a)+len(b)),牛客的机子跑的飞快,3ms过

京公网安备 11010502036488号