公共钥匙盒

本文深入探讨了使用C++进行编程竞赛的高级技巧,包括如何利用STL库中的map和vector进行高效的数据处理,以及自定义比较函数和结构体的应用。通过对具体代码的解析,读者可以学习到如何优化算法,提高程序的运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//上下两个都只有10分,不知道哪错了 ....

 


#include <iostream>
#include<algorithm>
#include<map>
#include<vector>
#include <cstring>
using namespace std;

typedef pair<int, int> PAIR;

bool cmp_by_value(const PAIR& lhs, const PAIR& rhs) {
    return lhs.second < rhs.second;
}

struct CmpByValue {
    bool operator()(const PAIR& lhs, const PAIR& rhs) {
        return lhs.second < rhs.second;
    }
};


int main() {
    int m, n;

    cin >> m >> n;
    map<int, int> a;


    int k = 1, c[n+5];
    for(int i=0; i<n; i++){
        int t, te, t2;

        cin >> t >> te >> t2;

        a[t] = max(a[t], te+t2);
    }
    vector<PAIR> b(a.begin(), a.end());
    sort(b.begin(), b.end(), CmpByValue());

memset(c, 0, sizeof(c));
    for(int i=1; i<=m; i++)
        if(a[i] == 0)//未被拿走
           c[k++] = i;
//cout << c[1];
    sort(c, c+k);
/*for(int i=1; i<k; i++)
    cout << c[i] << " ";
    cout << endl;
*/
  // sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);
    {
        for(int i=0,j=1,p=1; j<=m; ++j) {
            if(c[p] == j && p<=k ) {
                cout << j << " ";
                p++;

            }
            else {
                cout << b[i].first << " ";
                i++;
            }
        }
    }

    return 0;
}


#include <iostream>
#include<algorithm>
using namespace std;

int main()
{
    int m, n;

    cin >> m >> n;
    int a[m+1]={0}, b[m+1]={0};//b用来查找原来的位置
    for(int i=0; i<n; i++){
        int t, te, c;

        cin >> t >> te >> c;


        a[t-1] = max(a[t-1], te+c);
        b[t-1] = max(b[t-1], te+c);
    }
    sort(a, a+m);//a内从小到大排序

    for(int i=0; i<m; i++)
    {
        for(int j=0; j<m; j++){
            if(a[i] == b[j]){
                cout << j+1 << " ";
                b[j] = -1;
                break;
            }
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值