第一遍fool 和 small 判断忘记了等号
德才相等的是fool 不是小人。。。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef struct node
{
int id;
int vgrade;
int tgrade;
int total;
}record;
bool cmp(record a, record b)
{
if(a.total != b.total)
return a.total > b.total;
else if(a.vgrade != b.vgrade)
return a.vgrade > b.vgrade;
else if(a.id != b.id)
return a.id < b.id;
}
int main()
{
int n,l,h;
record s[100010];
record sage[100010],nob[100010],fool[100010],sma[100010];
scanf("%d %d %d",&n,&l,&h);
for(int i =0;i<n;i++)
{
scanf("%d %d %d",&s[i].id,&s[i].vgrade,&s[i].tgrade);
s[i].total = s[i].tgrade + s[i].vgrade;
// printf("%d %d %d",s[i].id,s[i].vgrade,s[i].tgrade);
}
sort(s,s+n,cmp);
int m=0,sin=0,nin=0,fin=0,smin=0;
for(int i =0 ;i<n;i++)
{
if(s[i].vgrade >= l && s[i].tgrade >= l)
{
m++;
if(s[i].vgrade >=h && s[i].tgrade >=h)
{
sage[sin]= s[i];
sin ++;
}
else if(s[i].vgrade >= h && s[i].tgrade < h)
{
nob[nin] = s[i];
nin ++;
}
else if(s[i].vgrade < h && s[i].tgrade < h && s[i].vgrade > s[i].tgrade)
{
fool[fin]= s[i];
fin++;
}
else
{
sma[smin] = s[i];
smin++;
}
}
}
printf("%d\n",m);
for(int i = 0;i<sin;i++)
{
printf("%d %d %d\n",sage[i].id,sage[i].vgrade,sage[i].tgrade);
}
for(int i = 0;i<nin;i++)
{
printf("%d %d %d\n",nob[i].id,nob[i].vgrade,nob[i].tgrade);
}
for(int i = 0;i<fin;i++)
{
printf("%d %d %d\n",fool[i].id,fool[i].vgrade,fool[i].tgrade);
}
for(int i = 0;i<smin;i++)
{
printf("%d %d %d\n",sma[i].id,sma[i].vgrade,sma[i].tgrade);
}
return 0;
}
在这里插入代码片
正确答案
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef struct node
{
int id;
int vgrade;
int tgrade;
int total;
}record;
bool cmp(record a, record b)
{
if(a.total != b.total)
return a.total > b.total;
else if(a.vgrade != b.vgrade)
return a.vgrade > b.vgrade;
else if(a.id != b.id)
return a.id < b.id;
}
int main()
{
int n,l,h;
record s[100010];
record sage[100010],nob[100010],fool[100010],sma[100010];
scanf("%d %d %d",&n,&l,&h);
for(int i =0;i<n;i++)
{
scanf("%d %d %d",&s[i].id,&s[i].vgrade,&s[i].tgrade);
s[i].total = s[i].tgrade + s[i].vgrade;
// printf("%d %d %d",s[i].id,s[i].vgrade,s[i].tgrade);
}
sort(s,s+n,cmp);
int m=0,sin=0,nin=0,fin=0,smin=0;
for(int i =0 ;i<n;i++)
{
if(s[i].vgrade >= l && s[i].tgrade >= l)
{
m++;
if(s[i].vgrade >=h && s[i].tgrade >=h)
{
sage[sin]= s[i];
sin ++;
}
else if(s[i].vgrade >= h && s[i].tgrade < h)
{
nob[nin] = s[i];
nin ++;
}
else if(s[i].vgrade >= s[i].tgrade)
{
fool[fin]= s[i];
fin++;
}
else
{
sma[smin] = s[i];
smin++;
}
}
}
printf("%d\n",m);
for(int i = 0;i<sin;i++)
{
printf("%d %d %d\n",sage[i].id,sage[i].vgrade,sage[i].tgrade);
}
for(int i = 0;i<nin;i++)
{
printf("%d %d %d\n",nob[i].id,nob[i].vgrade,nob[i].tgrade);
}
for(int i = 0;i<fin;i++)
{
printf("%d %d %d\n",fool[i].id,fool[i].vgrade,fool[i].tgrade);
}
for(int i = 0;i<smin;i++)
{
printf("%d %d %d\n",sma[i].id,sma[i].vgrade,sma[i].tgrade);
}
return 0;
}