专栏文章

题解:P13985 [PO Final 2023] 通胀 / Inflation

P13985题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minzzs92
此快照首次捕获于
2025/12/02 11:07
3 个月前
此快照最后确认于
2025/12/02 11:07
3 个月前
查看原文

题目大意

给定小数 nn3030 个小数 aia_i。你需要进行两种操作:
  • nn+ain\gets n+a_i
  • nn×(1+ai100)n\gets n\times(1+\dfrac{a_i}{100})
3030 次操作后,nn 的最大值。

思路

显然可以发现,对于 n<100n < 100 时,方案一的结果比方案二大;对于 n>100n > 100 时,方案二的结果比方案一的结果更大(结尾有证明)。在代码实现过程中,n=100n=100 可以任意归在两种方案中,结果不变。记得存 double 类型。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
	double n,ans;
	cin>>ans;
	for(int i=0;i<30;i++)
	{
		cin>>n;
		if(ans>=100) ans*=(1.000+n/1.000/100);
		else ans+=n; 
	}
	cout<<fixed<<setprecision(10)<<ans;
	return 0;
}

补充证明

n>100n > 100 时:
n100<1n+ai=n×1+ai×1>n×1+ai×n100=n×(1+ai100)即 n+ai>n×(1+ai100)\because \dfrac{n}{100}<1\\ \therefore n+a_i=n\times 1+a_i\times 1 > n\times 1+a_i\times \dfrac{n}{100}=n\times(1+\dfrac{a_i}{100})\\ \text{即 } n+a_i>n\times(1+\dfrac{a_i}{100})
所以方案一的结果大于方案二的结果。
n<100n<100 时:
n100>1n+ai=n×1+ai×1<n×1+ai×n100=n×(1+ai100)即 n+ai<n×(1+ai100)\because \dfrac{n}{100}>1\\ \therefore n+a_i=n\times 1+a_i\times 1 < n\times 1+a_i\times \dfrac{n}{100}=n\times(1+\dfrac{a_i}{100})\\ \text{即 } n+a_i<n\times(1+\dfrac{a_i}{100})
所以方案一的结果小于方案二的结果。
n=100n=100 时:
n100=1n+ai=n×1+ai×1=n×1+ai×n100=n×(1+ai100)即 n+ai=n×(1+ai100)\because \dfrac{n}{100}=1\\ \therefore n+a_i=n\times 1+a_i\times 1 = n\times 1+a_i\times \dfrac{n}{100}=n\times(1+\dfrac{a_i}{100})\\ \text{即 } n+a_i=n\times(1+\dfrac{a_i}{100})
所以当 n=100n=100 时归在方案一还是方案二结果都相等。

评论

0 条评论,欢迎与作者交流。

正在加载评论...