排序——81C Average Score

a==b
a>b时按: if(a.shu==b.shu) return a.no<b.no; return a.shu<b.shu;  
a<b时按: if(a.shu==b.shu) return a.no>b.no; return a.shu<b.shu;  
View Code
#include<iostream>
#include
<cstdio>
#include
<algorithm>
using namespace std;

struct data
{
int no;
int shu;
}qun[
100009];

bool hash[100009];

int cmp(data a,data b)
{
if(a.shu==b.shu)
return a.no<b.no;
return a.shu<b.shu;
}

int cmp1(data a,data b)
{
if(a.shu==b.shu)
return a.no>b.no;
return a.shu<b.shu;
}

int main()
{
int n,a,b;
scanf(
"%d%d%d",&n,&a,&b);
int i;
for(i=0;i<n;i++)
{
scanf(
"%d",&qun[i].shu);
qun[i].no
=i;
}
if(a==b)
{
for(i=0;i<a;i++)
printf(
"1 ");
for(i=0;i<b;i++)
printf(
"2 ");
printf(
"\n");
return 0;
}

if(a>b)
{
sort(
&qun[0],&qun[n],cmp);
for(i=0;i<a;i++)
{
hash[qun[i].no]
=1;
}

for(i=0;i<n;i++)
{
if(hash[i]==1)
printf(
"1 ");
else
printf(
"2 ");
}
}
else
{
sort(
&qun[0],&qun[n],cmp1);

for(i=0;i<b;i++)
{
hash[qun[i].no]
=1;
}

for(i=0;i<n;i++)
{
if(hash[i]==1)
printf(
"2 ");
else
printf(
"1 ");
}
}
printf(
"\n");
}
原文地址:https://www.cnblogs.com/huhuuu/p/2036989.html