题解:P12034 [USTCPC 2025] Introduction to ICPC

· · 题解

题目传送门

这道题说难不难,说简单也不简单。关键在于对题目的理解。\ 我因为罚时算错被WA了三次\ 先放上罚时的计算公式

x*297+180000(x为题目通过数)

然后就是模拟了,伪代码如下

int 金,银,铜,荣誉;
    cin >> g >> s >> b >> h;
    for(int i = 1;i<=g+s+b+h;i++){
        输入 金>>银>>铜>>荣誉
    }
    排序(首指针,尾指针,比较函数);
    输出每种奖牌的上下界
    return 0;

AC代码

int g,s,b,h;
    cin >> g >> s >> b >> h;
    for(int i = 1;i<=g+s+b+h;i++){
        cin >> a[i].tg >> a[i].fs;
    }
    sort(a+1,a+1+g+s+b+h,cmp);
    cout << a[g].tg <<" "<< a[g].fs << " ";
    if(a[g+1].fs==0){
        cout << a[g+1].tg+1 << " " << 180000+(a[g+1].tg+1)*279 << "\n";
    }else{
        cout <<a[g+1].tg <<" "<< a[g+1].fs-1 << "\n";
    }
    cout << a[g+s].tg <<" "<< a[g+s].fs << " ";
    if(a[g+s+1].fs==0){
        cout << a[g+s+1].tg+1 << " " << 180000+(a[g+s+1].tg+1)*279 << "\n";
    }else{
        cout <<a[g+s+1].tg <<" "<< a[g+s+1].fs-1 << "\n";
    }
    cout << a[g+s+b].tg <<" "<< a[g+s+b].fs << " ";
    if(a[g+s+b+1].fs==0){
        cout << a[g+s+b+1].tg+1 << " " << 180000+(a[g+s+b+1].tg+1)*279 << "\n";
    }else{
        cout <<a[g+s+b+1].tg <<" "<< a[g+s+b+1].fs-1 << "\n";
    }
    return 0;