2020年1月1日 林大OJ习题 排序与桶排序

2020年1月1日 排序与桶排序

林大OJ 1481 谁考了第k名-排序

#include <bits/stdc++.h>

using namespace std;

struct student{
    char num[10];
    double score;
}stu[101];

int cmp(const struct student &a,const struct student &b){
    return a.score>b.score;
}

int main()
{
    int n,k;
    cin>>n>>k;
    getchar();
    for(int i=0;i<n;i++)
        cin>>stu[i].num>>stu[i].score;
    sort(stu+1,stu+1+n,cmp);
    printf("%s %g\n",stu[k].num,stu[k].score);
    return 0;
}

林大OJ 1482 奇数单增序列

#include <bits/stdc++.h>

using namespace std;

int cmp(const int &a,const int &b){
    return a<b;
}

int main()
{
    int n,a[501],b[501];
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    int k=0;
    for(int i=0;i<n;i++){
        if(a[i]%2!=0){
            b[k]=a[i];
            k++;
        }
    }
    sort(b,b+k,cmp);
    for(int i=0;i<k;i++){
        if(i<k-1)
            cout<<b[i]<<",";
    }
    cout<<b[k-1]<<endl;
    return 0;
}

林大OJ 1483 成绩排序

#include <bits/stdc++.h>

using namespace std;

struct student{
    char name[10];
    int score;
}stu[21];

int cmp(const struct student &a,const struct student &b){
    if(a.score!=b.score)
        return a.score>b.score;
    else
        return strcmp(a.name,b.name)<0;
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>stu[i].name>>stu[i].score;
    sort(stu,stu+n,cmp);
    for(int i=0;i<n;i++)
        cout<<stu[i].name<<" "<<stu[i].score<<endl;
    return 0;
}

林大OJ 1659 没必要的排序1

#include <bits/stdc++.h>

using namespace std;

int cmp(const int &a,const int &b){
    return a>b;
}
int main()
{
    int n,k,a[1001],sum;
    cin>>n>>k;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,cmp);
    sum=0;
    for(int i=0;i<k;i++)
        sum+=a[i];
    cout<<sum<<endl;
    return 0;
}

林大OJ 1650 没必要的排序2

来源:nefu_ljw

#include <bits/stdc++.h>

using namespace std;

int s[1e5]={0};

int main()
{
    int x,n,k,ans,num,i;
    cin>>n>>k;
    for(i=1;i<=n;i++){
        cin>>x;
        s[x]++;
    }
    ans=num=0;
    for(i=1e5;i>=1;i--){
        if(s[i]>0){
            ans=ans+s[i]*i;
            num+=s[i];
        }
        if(num>=k){
            ans-=(num-k)*i;
            break;
        }
    }
    cout<<ans<<endl;
    return 0;
}

林大OJ 554 老和尚的导员

#include <bits/stdc++.h>

using namespace std;

struct student{
    int a[5],s,k;
}stu[200];

int cmp(const struct student &m,const struct student &n){
    if(m.s!=n.s) return m.s>n.s;
    else if(m.a[1]!=n.a[1]) return m.a[1]>n.a[1];
    else if(m.a[2]!=n.a[2]) return m.a[2]>n.a[2];
    else if(m.a[3]!=n.a[3]) return m.a[3]>n.a[3];
    else if(m.a[4]!=n.a[4]) return m.a[4]>n.a[4];
}

int main()
{
    int n,i;
    while(cin>>n){
        for(i=1;i<=n;i++){
            cin>>stu[i].a[1]>>stu[i].a[2]>>stu[i].a[3]>>stu[i].a[4];
            stu[i].s=stu[i].a[1]+stu[i].a[2]+stu[i].a[3]+stu[i].a[4];
            stu[i].k=i;
        }
        sort(stu+1,stu+1+n,cmp);
        for(i=1;i<=n;i++)
            cout<<stu[i].k<<" "<<stu[i].s<<endl;
    }
    return 0;
}

林大OJ 555 和尚的奖学金

#include <bits/stdc++.h>

using namespace std;

bool cmp(const int &a,const int &b){
    return a>b;
}

int main()
{
    int m,n,o,i;
    while(scanf("%d %d %d",&n,&m,&o)!=EOF){
        int a[n+1];
        for(i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+1+n,cmp);
        for(i=1;i<m;i++)
            cout<<a[i]<<" ";
        cout<<a[m]<<endl;
        for(i=n;i>n-o+1;i--)
            cout<<a[i]<<" ";
        cout<<a[n-o+1]<<endl;
    }
    return 0;
}

林大OJ 556 健忘的老和尚

#include <bits/stdc++.h>
using namespace std;

struct student{
    char name[101];
    int score;
}stu[200];

int cmp(const struct student &a,const struct student &b){
    return a.score<b.score;
}

int main()
{
    int m,n,o,i;
    while(cin>>n>>m>>o){
        for(i=1;i<=n;i++)
            cin>>stu[i].name>>stu[i].score;
        sort(stu+1,stu+1+n,cmp);
        for(i=n-m+1;i<=n;i++)
            cout<<stu[i].name<<endl;
        for(i=1;i<=o;i++)
            cout<<stu[i].name<<endl;
    }
    return 0;
}

林大OJ 873 戏说三国

#include <bits/stdc++.h>

using namespace std;

struct student{
    char name[30];
    double x,y,z,s,x1,y1,z1;
}stu[100001];

bool cmp(const struct student &m,const struct student &n){
    if(m.s!=n.s) return m.s>n.s;
    else if(m.x1!=n.x1) return m.x1>n.x1;
    else if(m.y1!=n.y1) return m.y1>n.y1;
    else if(m.z1!=n.z1) return m.z1>n.z1;
}

int main()
{
    int t,n,i,j;
    double a,b,c;
    while(scanf("%d",&t)!=-1){
        for(j=1;j<=t;j++){
            scanf("%d%lf%lf%lf",&n,&a,&b,&c);
            for(i=1;i<=n;i++){
                scanf("%s %lf %lf %lf",stu[i].name,&stu[i].x,&stu[i].y,&stu[i].z);
                stu[i].x1=stu[i].x*b*0.01;
                stu[i].y1=stu[i].y*a*0.01;
                stu[i].z1=stu[i].z*c*0.01;
                stu[i].s=stu[i].x1+stu[i].y1+stu[i].z1;
            }
            sort(stu+1,stu+1+n,cmp);
            printf("Case #%d:\n",j);
            for(i=1;i<=n;i++)
                printf("%s %.4lf %.4lf %.4lf %.4lf\n",stu[i].name,stu[i].s,stu[i].x1,stu[i].y1,stu[i].z1);
        }
    }
    return 0;
}

林大OJ 874 相约摩洛哥

#include <bits/stdc++.h>

using namespace std;

struct team
{
    char name[30];
    int a[4],b[4],sum,k;
} t[100001];

bool cmp(const struct team &m,const struct team &n)
{
    if(m.k!=n.k) return m.k>n.k;
    if(m.k==n.k) return m.sum<n.sum;
}

int main()
{
    int i,n,j;
    while(scanf("%d",&n)!=-1)
    {
        for(i=1; i<=n; i++)
            scanf("%s%d%d%d",t[i].name,&t[i].a[1],&t[i].a[2],&t[i].a[3]);
        for(i=1; i<=n; i++)
            scanf("%d%d%d",&t[i].b[1],&t[i].b[2],&t[i].b[3]);
        for(i=1; i<=n; i++)
        {
            t[i].k=t[i].sum=0;
            for(j=1; j<=3; j++)
            {
                if(t[i].a[j]!=-1)
                {
                    t[i].k++;
                    t[i].sum=t[i].sum+t[i].a[j]+20*(t[i].b[j]-1);
                }
            }
        }
        sort(t+1,t+1+n,cmp);
        for(i=1; i<=n; i++)
        {
            printf("%s %d %d\n",t[i].name,t[i].k,t[i].sum);
        }
    }
    return 0;
}

林大OJ 1297 结构体排序一

#include <bits/stdc++.h>

using namespace std;

struct point{
    int x,y;
}poi[100];

int a,b;

bool cmp1(const struct point &m,const struct point &n){
    if(m.x==n.x) return m.y<n.y;
    else return m.x<n.x;
}
bool cmp2(const struct point &m,const struct point &n){
    if(m.x==n.x) return m.y>n.y;
    else return m.x<n.x;
}
bool cmp3(const struct point &m,const struct point &n){
    if(m.x==n.x) return m.y<n.y;
    else return m.x>n.x;
}
bool cmp4(const struct point &m,const struct point &n){
    if(m.x==n.x) return m.y>n.y;
    else return m.x>n.x;
}

int main()
{
    int n,i;
    while(cin>>a>>b>>n){
        for(i=1;i<=n;i++){
            cin>>poi[i].x>>poi[i].y;
        }
        if(a==1&&b==1) sort(poi+1,poi+1+n,cmp1);
        if(a==1&&b==0) sort(poi+1,poi+1+n,cmp2);
        if(a==0&&b==1) sort(poi+1,poi+1+n,cmp3);
        if(a==0&&b==0) sort(poi+1,poi+1+n,cmp4);

        for(i=1;i<=n;i++){
            printf("(%d,%d)\n",poi[i].x,poi[i].y);
        }
    }
    return 0;
}

林大OJ 1298 结构体排序二

#include <bits/stdc++.h>

using namespace std;

struct point{
    int x,y,z;
}poi[101];

bool cmp(const struct point &a,const struct point &b){
    if(a.x!=b.x) return a.x<b.x;
    else if(a.y!=b.y) return a.y<b.y;
    else if(a.z!=b.z) return a.z<b.z;
}

int main()
{
    int n,i;
    while(cin>>n){
        for(i=1;i<=n;i++){
            cin>>poi[i].x>>poi[i].y>>poi[i].z;
        }
        sort(poi+1,poi+1+n,cmp);
        for(i=1;i<=n;i++){
            printf("(%d,%d,%d)\n",poi[i].x,poi[i].y,poi[i].z);
        }
    }
    return 0;
}

林大OJ 2068 出生日期

#include <bits/stdc++.h>

using namespace std;

struct student{
    char name[30];
    int y,m,d;
    int k;
}stu[101];

bool cmp(const struct student &a,const struct student &b){
    if(a.y!=b.y) return a.y<b.y;
    else if(a.m!=b.m) return a.m<b.m;
    else if(a.d!=b.d) return a.d<b.d;
    else return a.k>b.k;
}

int main()
{
    int n,i;
    while(cin>>n){
        for(i=1;i<=n;i++){
            cin>>stu[i].name>>stu[i].y>>stu[i].m>>stu[i].d;
            stu[i].k=i;
        }
        sort(stu+1,stu+1+n,cmp);
        for(i=1;i<=n;i++){
            cout<<stu[i].name<<endl;
        }
    }
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值