zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    mongoDb学习以及spring管理 (包括百度云配置)
    Python循环嵌套
    Web应用功能测试测试点
    二维数组联通子数组
    二维数组最大子数组问题
    环一维数组最大子数组问题
    电梯调研
    最大子数组问题
    小学生题目
    3.13题目思路
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14494461.html
Copyright © 2011-2022 走看看