CSP2022-12
第一题(太水了)
#include <cmath> #include <iostream> #include <iomanip> using namespace std; const int N = 1e6+10 ; int n; double lixi, w, sum = 0; int main(){ cin>> n>> lixi ; for(int i=0; i<=n; i++) { cin>>w ; sum += w / pow((1.0+lixi),i); } cout<<fixed<<setprecision(3)<<sum ; return 0 ; }
第二题
稍微复杂一点,花了将近一个小时的时间,主要是第二行的最晚时间不好算,好在也ac了
#include <cmath> #include <iostream> #include <iomanip> using namespace std; const int N = 1e6+10 ; int q[N] , yilai[N]; int ear[N],last[N]; int n, m ; // n天 m科 bool flag = true ; // 标记是否可以输出第二行 int main(){ cin>> n>> m; for(int i=1; i<=m; i++) scanf("%d", &yilai[i]) ; for(int i=1; i<=m; i++) scanf("%d", &q[i]) ; //当前所需天数 for(int i=1; i<=m; i++) { if(yilai[i] == 0) ear[i] = 1 ; else ear[i] = q[yilai[i]] + ear[yilai[i]] ; cout<<ear[i]<<' '; // 最早开始时间 if(ear[i]+q[i] > n+1) flag = false ; // 做不完 } cout<<endl; if(flag) // 倒着算 { for(int i=m; i>=1; i--) { bool zhaodao = false ; int minl = N; for(int j=1; j<=m ;j++) //寻找依赖关系 i=2 { if(yilai[j] == i) //yilai[5] = 2 { zhaodao = true ; minl = min(last[j], minl) ; // 3同时被4 6 依赖,选最早开始的 } } if(!zhaodao) //没找到,说明是叶子节点 { last[i] = n+1-q[i] ; } else { last[i] = minl - q[i] ; } } for(int i=1; i<=m; i++) cout<<last[i]<<' ' ; } return 0 ; }