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;
}