ccfcsp-202212(1、2、3)

202212-1 现值计算

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    int n;
    double i;
    cin >> n >> i;
    vector<double> money(n + 1);
    double res = 0;
    for(int j = 0; j <= n; j++){
        cin >> money[j];
        res += money[j] / pow(1 + i, j);
    }
    cout << res;
    return 0;
}

202212-2 训练计划

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, m;
    cin >> n >> m;
    vector<vector<int>> vec(m + 1, vector<int>(2,0));
    unordered_set<int> mset;
    for(int i = 1; i <= m; i++){
        cin >> vec[i][0];
        mset.insert(i);
    }
    for(int i = 1; i <= m; i++){
        cin >> vec[i][1];
        if(mset.find(vec[i][0]) != mset.end()){
            mset.erase(vec[i][0]);
        }
    }
    vector<int> early(m + 1, 0);//最早
    vector<int> late(m + 1, INT_MAX);//最晚
    for(int i = 1; i <= m; i++){
        int day = 1;
        int j = vec[i][0];
        while(j != 0){
            day += vec[j][1];
            j = vec[j][0];
        }
        early[i] = day;
        cout << day << " ";
    }
    cout << endl;
    for(auto it : mset){
        late[it] = n - vec[it][1] + 1;
        int i = it;
        int j = vec[it][0];//j为i的上一个节点
        while(j != 0){
            late[j] = min(late[j], late[i] - vec[j][1]);//可能有不同路径,所以要取最小值
            i = j;
            j = vec[j][0];
        }
    }
    int flag = 1;
    for(int i = 1; i <= m; i++){
        if(late[i] <= 0)
            flag = 0;
    }
    if(flag){
        for(int i = 1; i <= m; i++){
            cout << late[i] << " ";
        }
    }
    return 0;
}

202212-3 JPEG 解码

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, T;
    vector<vector<int>> Q(8, vector<int>(8));
    vector<vector<int>> M(8, vector<int>(8, 0));
    vector<vector<int>> M1(8, vector<int>(8, 0));
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            cin >> Q[i][j];
        }
    }
    cin >> n >> T;
    vector<int> data(n);
    for(int i = 0; i < n; i++){
        cin >> data[i];
    }

    //读入扫描数据
    int k = 0;
    for(int i = 0; i < 15; i++){
        if(i % 2){
            for(int j = max(i - 7 , 0); j <= i && j < 8; j++){
                M[j][i - j] = data[k++];
            }
        }else{
            for(int j = min(i, 7); j >= 0 && i - j < 8; j--){
                M[j][i - j] = data[k++];
            }
        }
        if(k >= n)
            break;
    }

    //将矩阵M中的每个元素都乘以量化矩阵Q中的对应元素
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            Q[i][j] *= M[i][j];
        }
    }
    //对矩阵M进行离散余弦逆变换
    for(int i = 0; i < 8; i++){
        for(int j = 0; j < 8; j++){
            double res = 0;
            for(int u = 0; u < 8; u++){
                for(int v = 0; v < 8; v++){
                    double au = u == 0 ? sqrt(0.5) : 1;
                    double av = v == 0 ? sqrt(0.5) : 1;
                    res += au * av * Q[u][v] * cos((acos(-1) / 8.0) * (i + 0.5) * u) * cos((acos(-1) / 8.0) * (j + 0.5) * v);
                }
            }
            int t = round(res / 4 + 128);
            if(t > 255)
                t = 255;
            else if(t < 0)
                t = 0;
            M1[i][j] = t;
        }
    }

    if(T == 0){
        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                cout << M[i][j] << " ";
            }
            cout << endl;
        }
    }else if(T == 1){
        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                cout << Q[i][j] << " ";
            }
            cout << endl;
        }
    }else if(T == 2){
        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                cout << M1[i][j] << " ";
            }
            cout << endl;
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值