【CCFCSP】2212真题笔记
-1.现值计算
分析
-
做第一题避免用vector,会把简单问题复杂化
-
普通数组或者哈希映射就足够解决问题了
-
微微微模拟,题目有公式
-
ans(-14.059) = (-200)x(1.05^0)+100x(1.05^-1)+100x(1.05^-2)
测试数据:
2 0.05
-200 100 100
AC:
#include<bits/stdc++.h>
using namespace std;
int n;
double i,ans=0;
int money[60];
int main(){
cin>>n>>i;
for(int k=0;k<=n;k++){
cin>>money[k];
ans+=money[k]*pow(1.0+i,-k);
}
printf("%.3f",ans);
//cout<<ans; 精度控制
return 0;
}
-2.训练计划
分析
- 读题读半天。。。
测试数据:
10 5
0 0 0 0 0
1 2 3 2 10
预期答案:
1 1 1 1 1
10 9 8 9 1
UNAC:70昏
-
如题所说,n天无法完成m项任务
-
只输出第一行:每项目最早开始时间
-
狠狠骗昏
-
逐渐摸索清楚自己在纸上如何画出数组的有效草稿
-
变量定义
-
输出数组
-
i/j模拟过程
-
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=105;
int p[N],t[N];
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>p[i];
for(int i=1;i<=m;i++)
cin>>t[i];
for(int i=1;i<=m;i++){
if(!p[i])
cout<<1<<' ';
else {
cout<<t[p[i]]+1<<' ';
t[i]+=t[p[i]];
}
}
return 0;
}
AC:满昏
-
输出第一行:最早开始时间
-
第二行:最晚开始时间
-
flag:f--完成m项任务有无超时
#include<bits/stdc++.h>
using namespace std;
int n;
int sum[375];
int m,f=1;
int a[104],b[104],st[104],en[104];
int main() {
cin >> n >> m;
for (int i =1; i <=m; i++)
cin >> a[i];
for (int i = 1; i <=m; i++)
cin >> b[i];
for (int i = 1; i <=m; i++) {
if (!a[i])
st[i]=1;
else
st[i]=st[a[i]]+b[a[i]];
if(st[i]+b[i]-1>n)
f=0;//无法完成项目,不输出第二行
en[i]=n-b[i]+1;
/*10 5
0 0 1 1 2
5 1 1 5 2
*/
}
for (int i = 1; i <=m; i++) {
cout<<st[i]<<" ";
}
if(f){
cout<<endl;
for(int i=m;i>=1;i--){
if(a[i]) {
//多个依赖
en[a[i]]=min(en[a[i]],en[i]-b[a[i]]);
}
}
for (int i = 1; i <=m; i++) {
cout<<en[i]<<" ";
}
}
return 0;
}

浙公网安备 33010602011771号