洛谷:最大乘积异常bug(玄关)
  • 板块题目总版
  • 楼主Simon_xue
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/20 09:54
  • 上次更新2024/1/20 12:09:19
查看原帖
洛谷:最大乘积异常bug(玄关)
994212
Simon_xue楼主2024/1/20 09:54

求大佬挑错:

未知bug传送门

please,必关
//策略:
//把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;
}
2024/1/20 09:54
加载中...