#include<bits/stdc++.h>
using namespace std;
int t,n,digit[15],digit2[15];
int main(){
cin>>t;
while(t--){
cin>>n;
int len=0;
int nn=n;
while(nn){
digit[++len]=nn%10;
nn/=10;
}
cout<<len<<'^'<<'\n';
int mini=1e9;
for(int i=1;(1<<i)<=n;i++){
int len2=0,now=(1<<i);
while(now){
digit2[++len2]=now%10;
now/=10;
}
cout<<i<<' '<<(1<<i)<<' '<<len2<<'\n';
int opt1=0,opt2=1;
while(opt1<=len&&opt2<=len2){
while(digit[len-opt1+1]!=digit2[len2-opt2+1]&&opt1<=len){
cout<<len-opt1+1<<'&'<<digit[len-opt1+1]<<'&'<<len2-opt2+1<<'&'<<digit2[len2-opt2+1]<<'\n';
opt1++;
}
if(digit[len-opt1+1]==digit2[len2-opt2+1]){
cout<<digit[len-opt1+1]<<' '<<digit2[len2-opt2+1]<<'\n';
cout<<opt2<<'*'<<'\n';
opt2++;
}else break;
}
cout<<len-opt2<<'\n';
mini=min(mini,len-opt2);
}
cout<<mini<<'\n';
}
return 0;
}
请自行忽视调错代码
思路:枚举可能的二次幂,比对能出现的最长前缀,用原始长度减一下就是答案,但是挂掉了,有没有好心人帮忙看一看。
PS:不要企图早上之前收到答案,我要睡觉力,顺便麻烦 At 一下谢谢