社区讨论

洛谷:最大乘积异常bug(玄关)

题目总版参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lrlf4fb6
此快照首次捕获于
2024/01/20 09:55
2 年前
此快照最后确认于
2024/01/20 12:09
2 年前
查看原帖

求大佬挑错:

please,必关
CPP
//策略:
//把n分解成2+....+k的形式,
//再把多余的部分分给前面,从后往前分
//用高精度计算所有数的乘积,
//共同输出
#include<bits/stdc++.h>
using namespace std;
int arr[10010],top;
int ans[1000000010];
void f(int a,int b)
{
	if(a<b)
	{
		if(b==arr[top])
		{
			for(int i=1;i<=top;i++) arr[i]++;
			arr[top]++;
		}
		return ;
	}
	arr[++top]=b;
	f(a-b,b+1);
}
int main()
{
	int n;
	cin>>n;
	if(n==3) {cout<<1<<" "<<2<<endl<<2;return 0;}
	if(n==4) {cout<<1<<" "<<3<<endl<<3;return 0;}
	f(n,2);
	for(int i=1;i<=top;i++)cout<<arr[i]<<" ";
	cout<<endl;
	int len=1000;
	for(int i=1;i<=top;i++)
	{
		for(int j=1;j<=1000;j++) ans[j]*=arr[i];
		for(int j=1;j<=1000;j++) ans[j+1]+=ans[j]/10,ans[j]%=10;
	}
//	for(int i=1;i<=n;i++)
//	{
//		cout<<arr[i]<<" ";	
//	}
	while(ans[len]==0) len--;
	for(int i=len;i>=1;i--) cout<<ans[i];
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...