社区讨论

神奇的变量。。。求助!

P1018[NOIP 2000 提高组] 乘积最大参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@m3ryxqho
此快照首次捕获于
2024/11/22 07:53
去年
此快照最后确认于
2025/11/04 14:13
4 个月前
查看原帖
CPP
#include <iostream>
using namespace std;
unsigned long long n, k, a[45], maxx = -1, mul;
void dfs(unsigned long long x, unsigned long long ans, unsigned long long last)
{
	if (x == k)
	{
		mul = 0;
		for (unsigned long long j = last + 1;j < n;j++)
		{
			mul += a[j];
			mul *= 10;
		}
		mul += a[n];
		maxx = max(maxx, mul * ans);
		return ;
	}
	for (unsigned long long i = last + 1;i < n - k + x;i++)
	{
		mul = 0;
		for (unsigned long long j = last + 1;j < i;j++)
		{
			mul += a[j];
			mul *= 10;
		}
		mul += a[i];
		dfs(x + 1, ans * mul, i);
	}
}
int main()
{
	cin >> n >> k;
	for (unsigned long long i = 1;i <= n;i++)
	{
		char c;
		cin >> c;
		a[i] = c - '0';
	}
	dfs(0, 1, 0);
	cout << maxx;
	return 0;
}

CPP
#include <iostream>
using namespace std;
long long n, k, a[45], maxx = -1, mul;
void dfs(long long x, long long ans, long long last)
{
	if (x == k)
	{
		mul = 0;
		for (int j = last + 1;j < n;j++)
		{
			mul += a[j];
			mul *= 10;
		}
		mul += a[n];
		maxx = max(maxx, mul * ans);
		return ;
	}
	for (int i = last + 1;i < n - k + x;i++)
	{
		mul = 0;
		for (int j = last + 1;j < i;j++)
		{
			mul += a[j];
			mul *= 10;
		}
		mul += a[i];
		dfs(x + 1, ans * mul, i);
	}
}
int main()
{
	cin >> n >> k;
	for (int i = 1;i <= n;i++)
	{
		char c;
		cin >> c;
		a[i] = c - '0';
	}
	dfs(0, 1, 0);
	cout << maxx;
	return 0;
}
这份代码我是用了unsigned long long 过不了,0pts,第二份代码是我用long long 60pts,求解为什么long long能过,但是unsigned long long 过不了
回复必关

回复

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

正在加载回复...