a309 排序:sort

//1044 【入门】编程输入10个正整数,然后自动按从大到小的顺序输出
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){return a>b;}//自定义规则
int main(){
int i,a[20],n=10;
for(i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n,cmp);
for(i=0;i<n-1;i++)printf("%d ",a[i]);
printf("%d\n",a[n-1]);
return 0;
}

自定义规则排序
//1245 【USACO】混合牛奶
【格式1】
#include<cstdio>
#include<algorithm>
using namespace std;
struct FM{int p,V;}a[5010];
bool cmp(FM a,FM b){return a.p<b.p;}//自定义排序规则
int main(){
int n,m,i,x=0;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)scanf("%d%d",&a[i].p,&a[i].V);
sort(a+1,a+m+1,cmp);
for(i=1;i<=m;i++){
x+=a[i].p*min(n,a[i].V);
n=n-a[i].V;
if(n<=0)break;
}
printf("%d\n",x);
return 0;
}
【格式2】
#include<algorithm>
using namespace std;
struct FM{
int p,V; //下行是自定义排序规则
bool operator <(const FM& b)const{return p<b.p;}
}a[5010];
int main(){
int n,m,i,x=0;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)scanf("%d%d",&a[i].p,&a[i].V);
sort(a+1,a+m+1);
for(i=1;i<=m;i++){
x+=a[i].p*min(n,a[i].V);
n=n-a[i].V;
if(n<=0)break;
}
printf("%d\n",x);
return 0;
}
样例输入
100 5
5 20
9 40
3 10
8 80
6 30
样例输出
630


#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000005];
bool cmp(const int& a,const int& b){return a>b;}
int main(){
int n,i,k,f,r;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n,cmp);
f=a[k-1];r=k;
for(i=k;i<n;i++)if(a[i]==f)r++;
printf("%d %d\n",f,r);
return 0;
}

浙公网安备 33010602011771号