【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;
    }
posted @ 2023-12-06 21:47  W-enzy  阅读(62)  评论(0)    收藏  举报