A-C 水
D:思路
考虑暴力匹配n与
1
−
2
60
1-2^{60}
1−260中二的幂次数,可以O(n)求出n中有p个非连续数位可以匹配上x的最大长度为p的前缀,则通过操作使n等于x的代价为
l
e
n
(
n
)
−
p
+
l
e
n
(
x
)
−
p
len(n)-p+len(x)-p
len(n)−p+len(x)−p。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mi[63];
ll f(ll x, ll p)
{
vector<ll>v,a;
while (p)
{
v.push_back(p % 10);
p /= 10;
}
while (x)
{
a.push_back(x % 10);
x /= 10;
}
reverse(v.begin(), v.end());
reverse(a.begin(), a.end());
ll q = 0;
int flag = 0;
for (ll i = 0;i < a.size();i++)
{
if (a[i] == v[q])q++,flag=1;
if (q == v.size())break;
}
return a.size() - q+v.size()-q;
}
void solve() {
ll n;
cin >> n;
ll mn = 1e9;
for (ll i = 0;i <= 60;i++)mn = min(mn, f(n, mi[i]));
cout << mn << endl;
}
int main()
{
mi[0] = 1;
for (ll i = 1;i <= 60;i++)mi[i] = mi[i - 1] * 2;
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll T;
cin>>T;
while(T--)solve();
return 0;
}