关于今晚的D
  • 板块学术版
  • 楼主Forever1507
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/8/19 00:52
  • 上次更新2023/11/4 10:07:15
查看原帖
关于今晚的D
359614
Forever1507楼主2021/8/19 00:52
#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 一下谢谢

2021/8/19 00:52
加载中...