这是为什么???神奇。
查看原帖
这是为什么???神奇。
1077535
Lcm_simida楼主2024/11/6 22:33

这是我原本的代码:

#include<bits/stdc++.h> 
using namespace std;
long long n,f[100000],num=0;
inline void dfs(long long x){
	if(x==0){
		cout<<"0";
		return ;
	}
	if(x==2){
		cout<<"2";
		return ;
	}
//	cout<<x<<"\n";
	long long l=0,r=num+1;
	while(l+1<r){
		long long mid=(l+r)>>1;
		if(f[mid]<=x) l=mid;
		else r=mid;
	}
	if(l==1) cout<<"2";
	else{
		cout<<"2(";
		dfs(l);
		cout<<")";
	}
	if(f[l]<x){
		cout<<"+";
		dfs(x-f[l]);
	}
}
int main(){
	f[0]=1;
	while(f[num]*2<=20000) f[++num]=f[num-1]*2;
	f[++num]=f[num]*2;
	cin>>n;
	dfs(n);
	return 0;
}

然后洛谷给我评了个MLEMLE

之后改了半天,发现

while(f[num]*2<=20000) f[++num]=f[num-1]*2;

这句话错了,我在其他 OJOJ 上都是这样写得,也是对的。

改后 ACAC 代码:

#include<bits/stdc++.h> 
using namespace std;
long long n,f[100000],num=0;
inline void dfs(long long x){
	if(x==0){
		cout<<"0";
		return ;
	}
	if(x==2){
		cout<<"2";
		return ;
	}
//	cout<<x<<"\n";
	long long l=0,r=num+1;
	while(l+1<r){
		long long mid=(l+r)>>1;
		if(f[mid]<=x) l=mid;
		else r=mid;
	}
	if(l==1) cout<<"2";
	else{
		cout<<"2(";
		dfs(l);
		cout<<")";
	}
	if(f[l]<x){
		cout<<"+";
		dfs(x-f[l]);
	}
}
int main(){
	f[0]=1;
	while(f[num]*2<=20000){
		num++;
		f[num]=f[num-1]*2;
	}
	f[++num]=f[num]*2;
	cin>>n;
	dfs(n);
	return 0;
}

不知道为什么,求教。

2024/11/6 22:33
加载中...