请看完后点个赞,谢谢
CF1661B
因为+1肯定在*2前面,所以直接枚举+1的次数就行了
*2最多15次,因为模的是32768(2的15次方)
所以+1最少0次,最多15次
代码如下
//CF1661B 22-04-10
#include <bits/stdc++.h>
using namespace std;
int n,a[32800];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i];
for (int j=1;j<=n;j++)
{
int mins=16;
for (int i=0;i<=15;i++)
{
int t=a[j],s=0;
t+=i;s+=i;t%=32768;
if (t==0 && s<mins) mins=s;
for (int k=0;k<=15-i;k++)
{
t*=2;t%=32768;s++;
if (t==0) break;
}
if (s<mins) mins=s;
}
cout<<mins<<" ";
}
return 0;
}