浏览器标题切换
浏览器标题切换end

PTA乙级1015 - 德才论 - 暴力

题意

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805307551629312

中文题,简单来说就是:

在德和才都>=l的条件下,按照下面顺序的优先级输出:
德>=h  才>=h  总分高->低
德>=h  才<h  总分高->低
德<h  才<h  德>=才  总分高->低
德>=l  才>=l  总分高->低

思路

四个条件存在四个数组里,然后每个数组单独去排序(总分高->低的一个cmp),最后四个数组分开输出即可。

我本来全部都存在一个数组里再去排序的,但是好像行不通,我怎么写都是有几行数据有问题。

AC代码

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;

const int N=100010;
struct node
{
    int id,d,c,sum;
}ans1[N],ans2[N],ans3[N],ans4[N];
int n,l,h;

bool cmp(node x,node y)
{
    if(x.sum!=y.sum) return x.sum>y.sum;
    if(x.d==y.d) return x.id<y.id;
    return x.d>y.d;
}

int main()
{
    cin>>n>>l>>h;
    int id,x,y,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
    for(int i=0;i<n;i++)
    {
        cin>>id>>x>>y;
        if(x>=l&&y>=l)
        {
            if(x>=h&&y>=h)
                ans1[cnt1].sum=x+y,ans1[cnt1].d=x,ans1[cnt1].c=y,ans1[cnt1++].id=id;
            else if(x>=h&&y<h)
                ans2[cnt2].sum=x+y,ans2[cnt2].d=x,ans2[cnt2].c=y,ans2[cnt2++].id=id;
            else if(x<h&&y<h&&x>=y)
                ans3[cnt3].sum=x+y,ans3[cnt3].d=x,ans3[cnt3].c=y,ans3[cnt3++].id=id;
            else if(x>=l&&y>=l)
                ans4[cnt4].sum=x+y,ans4[cnt4].d=x,ans4[cnt4].c=y,ans4[cnt4++].id=id;
        }
    }
    sort(ans1,ans1+cnt1,cmp);
    sort(ans2,ans2+cnt2,cmp);
    sort(ans3,ans3+cnt3,cmp);
    sort(ans4,ans4+cnt4,cmp);
    cout<<cnt1+cnt2+cnt3+cnt4<<endl;
    for(int i=0;i<cnt1;i++)
        cout<<ans1[i].id<<" "<<ans1[i].d<<" "<<ans1[i].c<<endl;
    for(int i=0;i<cnt2;i++)
        cout<<ans2[i].id<<" "<<ans2[i].d<<" "<<ans2[i].c<<endl;
    for(int i=0;i<cnt3;i++)
        cout<<ans3[i].id<<" "<<ans3[i].d<<" "<<ans3[i].c<<endl;
    for(int i=0;i<cnt4;i++)
        cout<<ans4[i].id<<" "<<ans4[i].d<<" "<<ans4[i].c<<endl;
    return 0;
}
posted @ 2021-03-07 13:59  抓水母的派大星  阅读(65)  评论(2编辑  收藏  举报