CCF CSP-2022-01 赛题练习
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF CSP-2022-01 赛题练习相关的知识,希望对你有一定的参考价值。
CCF CSP-2022-01 赛题练习
1. 现值计算
题目描述
问题描述
评估一个长期项目的投资收益,资金的时间价值是一个必须要考虑到的因素。简单来说,假设银行的年利率为 5,那么当前的 100 元一年后就会变成 105 元,两年后变成 110.25 元。因此,现在收到 100 元比两年后收到 100 元收益更多,两年后再支出 100 元会比立刻支出 100 元更加划算。
基于上述分析,我们使用如下的模型来衡量时间价值:假设银行的年利率为 i,当前(第 0 年)的 x 元就等价于第 k 年的 x*(1+i)^k 元;相应的,第 k 年的 x 元的当前价值实际为 x*(1+i)^(−k) 元。
现给出某项目未来 n 年的预计收入支出情况,在将所有款项转换为当前价值后,试计算该项目的总收益。
输入格式
从标准输入读入数据。
输入的第一行包含空格分隔的一个正整数 n 和一个实数 i,分别表示年数和银行年利率。
输入的第二行包含空格分隔的 n+1 个整数,依次表示该项目第 0,1,⋯,n 年的预计收入(正数)或支出(负数)。
输出格式
输出到标准输出中。
输出一个实数,表示该项目在当前价值标准下的总盈利或亏损。
样例输入
2 0.05
-200 100 100
样例输出
-14.059
样例说明
该项目当前支出 200 元,在接下来两年每年收入 100 元。虽然表面看起来收支相抵,但计算当前价值可知总共亏损了约 14.059 元。
思路描述
本题主要是要理解题目的问题描述中的 “第 k 年的 x 元的当前价值实际为 x*(1+i)^(−k) 元”
这一句话,即之后的每一年的x元 = 当前价值的x*(1+i)^(−k)
,然后将所有的价值相加即可得到最后答案。
Python:
a = input().split()
n = int(a[0])
i = float(a[1])
money = [i for i in map(int, input().split())]
all = 0
for j in range(n+1):
all += money[j]*(1+i)**(-j)
print("%.3f"%all)
C++不会实现!
202104-4 校门外的树
题意概述
具体图例请见原题。
给定一个区间 [ a l , a r ) [a_l,a_r) [al,ar),对于树的坐标的集合 T ⊂ ( a l , a r ) ( T ⊂ Z ) T\\subset (a_l,a_r) (T\\subset Z) T⊂(al,ar)(T⊂Z),归纳定义 T T T在 [ a l , a r ) [a_l,a_r) [al,ar)上是美观的:
- 如果 T ≠ ∅ T\\neq \\emptyset T=∅, T ∩ a l , a l + 1 , ⋯ , a r = ∅ T\\cap \\a_l,a_l+1,\\cdots,a_r\\=\\emptyset T∩al,al+1,⋯,ar=∅,并且存在一个公差 d > = 1 d>=1 d>=1,使得 中的元素按照从小到大的顺序排序后,可以构成一个公差为 d d d的等差数列(显然,这个等差数列的首项为 a l a_l al,末项为 a r a_r ar),则 T T T在 [ a l , a r ) [a_l,a_r) [al,ar)上是美观的;
- 如果 T ∩ a l , a l + 1 , ⋯ , a r = ∅ T\\cap \\a_l,a_l+1,\\cdots,a_r\\=\\emptyset T∩al,al+1,⋯,ar=∅,并且存在一个下标 m ( l < m < r ) m(l<m<r) m(l<m<r),使得 T ∩ ( a l , a m ) T\\cap (a_l,a_m) T∩(al,am)在 [ a l , a m ) [a_l,a_m) [al,am)是美观的,且 T ∩ [ a m , a r ) T\\cap [a_m,a_r) T∩[am,ar)在 [ a m , a r ) [a_m,a_r) [am,ar)是美观的,则 T T T在 [ a l , a r ) [a_l,a_r) [al,ar)上是美观的。
根据这一定义,空集在任意区间上都不是美观的;另外,如果存在下标 i i i使得 a i ∈ T a_i\\in T ai∈T,那么 T T T一定不是美观的。
我们称两种种树的方案是本质不同的,当且仅当两种方案中,种树的坐标集合不同。请求出 [ a l , a r ) [a_l,a_r) [al,ar)所有本质不同的美观的种树方案。当然,由于方案可能很多,你只需要输出总方案数对 1 0 9 + 7 10^9+7 109+7取模的结果。
输入输出格式
输入的第一行包含一个正整数 n n n,表示障碍物的数量。输入的第二行包括 n n n个非负整数,表示每个障碍物的坐标 a 1 , a 2 , … , a n a_1,a_2,\\dots,a_n a1,a2,…,an。保证障碍物坐标严格递增给出。
输出一个非负整数,表示本质不同的美观的种树方案的数量对 1 0 9 + 7 10^9+7 109+7取模的结果。
数据规模
2 < n < = 1000 , 0 < = a i < = 1 0 5 2<n<=1000, 0<=a_i<=10^5 2<n<=1000,0<=ai<=105
算法设计
不妨设数字
n
n
n不包含自己在内的约数个数为
f
i
f_i
fi,例如数字 6 的约数有 3 个:
1
,
2
,
3
1,2,3
1,2,3。显然,区间
[
a
i
,
a
i
+
1
]
[a_i,a_i+1]
[ai,ai+1]构成的种树方案数量恰好为
f
a
i
+
1
−
a
i
f_a_i+1-a_i
fai+1−ai(想一想为什么?)。不妨令
d
p
[
i
]
dp[i]
dp[i]表示前
i
i
i个障碍物构成的种树方案数量,我们可以利用一个动态规划算法求解
d
p
[
i
]
dp[i]
dp[i]。边界条件为
d
p
[
1
]
=
1
dp[1]=1
dp[1]=1。对于第
i
i
i个障碍物,利用一个set
记录遍历过的所有约数,按
i
−
1
i-1
i−1到
1
1
1的顺序枚举CCF CSP-2021-04 赛题练习