文章

19

粉丝

67

获赞

29

访问

11.9k

头像
详细注释代码,使用前缀和和dp数组减少计算
P1033
发布于2023年8月25日 20:50
阅读数 658

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int n;
	cin >> n; // 输入询问次数
	vector<long long> dp(1001);
	dp[0] = 0;
	dp[1] = 1;
	// 避免重复计算每行的细菌数量
	for (int i = 2; i <= 1000; i++)
	{
		dp[i] = 2 * i - 1;
	}
	// 使用前缀和避免重复计算对于每次询问时的细菌数量
	vector<long long> prefix(1001);
	prefix[0] = 0;
	for (int i = 1; i <= 1000; i++)
	{
		prefix[i] = prefix[i - 1] + dp[i];
	}
	// 对于每次询问
	while (n--)
	{
		long long sum = 0;
		int x;
		cin >> x;
		if (x == 0)
		{
			cout << 1 << endl;
		}
		else
		{
			sum = prefix[x - 1] * 2 + dp[x];
			cout << sum << endl;
		}
	}
	return 0;
}

也可以直接总结数学规律,推导出每一天细菌数量的数学公式,参考代码如下。

#include <bits/stdc++.h>

using namespace std;

int main()
{
	int n;
	cin >> n;
	while (n--)
	{
		int x;
		cin >> x;
		cout << 2 * pow(x, 2) - 2 * x + 1 << endl;
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发