结构体

排序

蒜头君班上一共有 n 个同学,每个同学依次编号为 1,2,…n,每个同学有一个分数。

现在他请你帮忙做一份全班同学的成绩排名表。 首先你需要按照分数从高到低将所有同学排序,再输出成绩单上每个同学的编号。

保证任意两个同学的分数互不相同。

输入格式

输入共有两行:

第一行为学生人数 n(4≤n≤100)。

接下来一行 n 个整数 ai(1≤ ai ≤100),分别表示每个同学的分数。

输出格式 输出共一行,为 n 个用空格隔开的整数,分别表示成绩排名第 1,2,3,…,n 的同学的编号。

样例输入

5

97

68

51

85

73

样例输出

1 4 5 2 3

#include<iostream>
#include<algorithm>
using namespace std;
struct data
{
    int i,s;
}d[100];
bool cmp(data a,data b)
{
    return a.s>b.s;
}
int main()
{
    int n;
    cin>>n;
    for (int i = 0; i < n; i++)
    {
        cin>>d[i].s;
        d[i].i=i+1;
    }
    sort(d,d+n,cmp);
    for (int i = 0; i < n; i++)
    {
        cout<<d[i].i<<" ";
    }
    printf("\n");
    return 0;
}

成绩排序

小蒜所在的学校一开学就进行了一次摸底考试。

摸底考试考了语文、数学、英语、科学共四门课程。

小蒜的老师汇总成绩后列出了成绩单,其中包括每个同学的姓名和四科的成绩。

现在老师希望表扬一下每门课程考试得分前四名和总分前四名的同学,同分数的情况下,名字字典序更小的先表扬。

请你帮助老师写一个程序,快速完成这件事情吧。

输入格式

第一行为学生人数 N(4≤N≤100)。

之后 N 行依次为每个学生的姓名和语文、数学、英语、科学这四门课程的成绩,之间用一个空格隔开(成绩都大于等于 0 小于等于 100)。

输出格式

输出第一行为语文考试要表扬前四名的同学的姓名,之间用一个空格隔开。

输出第二行为数学考试要表扬前四名的同学的姓名,之间用一个空格隔开。

输出第三行为英语考试要表扬前四名的同学的姓名,之间用一个空格隔开。

输出第四行为科学考试要表扬前四名的同学的姓名,之间用一个空格隔开。

输出第五行为总分要表扬前四名的同学的姓名,之间用一个空格隔开。

样例输入

5

Alice 99 98 97 96

Bob 98 97 96 94

Coy 94 94 95 96

Dan 93 95 96 97

Evan 0 94 95 95

样例输出

Alice Bob Coy Dan

Alice Bob Dan Coy

Alice Bob Dan Coy

Dan Alice Coy Evan

Alice Bob Dan Coy

#include <iostream>
#include <algorithm>
using namespace std;
struct data
{
    string name;
    int s[5];
} d[100];
int si;
bool cmp(data a, data b)
{
    if (a.s[si] != b.s[si])
    {
        return a.s[si] > b.s[si];
    }
    else
    {
        return a.name < b.name;
    }
}
int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> d[i].name;
        for (int j = 0; j < 4; j++)
        {
            cin >> d[i].s[j];
            d[i].s[4] += d[i].s[j];
        }
    }
    for (int i = 0; i <= 4; i++)
    {
        si = i;
        sort(d, d + n, cmp);
        for (int j = 0; j < 4; j++)
        {
            cout << d[j].name << " ";
        }
        cout << endl;
    }
    return 0;
}

抢气球

教室的墙上挂满了气球,五颜六色,小朋友们非常喜欢。

刚一下课,小朋友们就打算去抢这些气球。

每个气球在墙上都有一定的高度,只有当小朋友跳起来时,手能够到的高度大于等于气球的高度,小朋友才能摘到这个气球。

为了公平起见,老师让跳的低的小朋友先摘,跳的高的小朋友后摘。小朋友都很贪心,每个小朋友在摘气球的时候都会把自己能摘的气球都摘掉。

很巧的是,小朋友们跳起来手能够着的高度都不一样,这样就不会有跳起来后高度相同的小朋友之间发生争执了。

输入格式

第一行输入两个空格分隔的整数 n,m(1≤n,m≤1000),其中 n 表示小朋友的数量,m 表示墙上气球的数量。

第二行输入 n 个正整数(每两个整数之间用空格隔开),第 i 个数为 ai (1≤ai≤10^5 ),表示第 i 个小朋友跳起来手能够着的高度为 ai 。

第三行输入 m 个正整数(每两个整数之间用空格隔开),第 i 个数为 h i (1≤hi≤10^5 ),表示第 i 个气球的高度为 hi 。

输出格式

输出一共 n 行,每行一个整数。 第 i 行表示第 i 个小朋友摘到的气球数量。

样例解释 1 对于第一组样例输入,摘取气球的顺序依次为 1,5,4,2,3 号小朋友。

1 号小朋友能摘 1,2,3 号气球,5 号小朋友能摘 4 号气球,4 号小朋友能摘 5,6 号气球,2,3 号小朋友没有气球可摘了。

样例输入1

5 6

3 7 9 6 4

1 2 3 4 5 6

样例输出1

3

0

0

2

1

样例输入2

10 10

1 2 3 4 5 6 7 8 9 10

3 1 4 6 7 8 9 9 4 12

样例输出2

1

0

1

2

0

1

1

1

2

0

#include <iostream>
#include <algorithm>
using namespace std;
struct data
{
	int i,h;
}d[1000];
int n,m,h[1000],ans[1000];
bool cmp(data a,data b)
{
    return a.h<b.h;
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>d[i].h;
        d[i].i=i;
    }
    for(int i=0;i<m;i++)
    {
        cin>>h[i];
    }
    sort(d,d+n,cmp);
    sort(h,h+m);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(i==0&&d[i].h>=h[j]||i>0&&d[i].h>=h[j]&&d[i-1].h<h[j])
            {
                ans[d[i].i]++;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<ans[i]<<endl;
    }
    return 0;
}

抢气球升级版

教室的墙上挂满了气球,五颜六色,小朋友们非常喜欢。

刚一下课,小朋友们就打算去抢这些气球。

每个气球在墙上都有一定的高度,只有当小朋友跳起来时,手能够到的高度大于等于气球的高度,小朋友才能摘到这个气球。

为了公平起见,老师让跳的低的小朋友先摘,跳的高的小朋友后摘。小朋友都很贪心,每个小朋友在摘气球的时候都会把自己能摘的气球都摘掉。

很巧的是,小朋友们跳起来手能够着的高度都不一样,这样就不会有跳起来后高度相同的小朋友之间发生争执了。

输入格式

第一行输入两个空格分隔的整数 n,m(1≤n,m≤10^5),其中 n 表示小朋友的数量,m 表示墙上气球的数量。

第二行输入 n 个正整数(每两个整数之间用空格隔开),第 i 个数为 ai (1≤ai≤10^9 ),表示第 i 个小朋友跳起来手能够着的高度为 ai 。

第三行输入 m 个正整数(每两个整数之间用空格隔开),第 i 个数为 h i (1≤hi≤10^9 ),表示第 i 个气球的高度为 hi 。

输出格式

输出一共 n 行,每行一个整数。 第 i 行表示第 i 个小朋友摘到的气球数量。

样例解释 1 对于第一组样例输入,摘取气球的顺序依次为 1,5,4,2,3 号小朋友。

1 号小朋友能摘 1,2,3 号气球,5 号小朋友能摘 4 号气球,4 号小朋友能摘 5,6 号气球,2,3 号小朋友没有气球可摘了。

样例输入1

5 6

3 7 9 6 4

1 2 3 4 5 6

样例输出1

3

0

0

2

1

样例输入2

10 10

1 2 3 4 5 6 7 8 9 10

3 1 4 6 7 8 9 9 4 12

样例输出2

1

0

1

2

0

1

1

1

2

0

#include <iostream>
#include <algorithm>
using namespace std;
struct data
{
	int i,h;
}d[100000];
int n,m,h[100000],ans[100000];
bool cmp(data a,data b)
{
    return a.h<b.h;
}
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>d[i].h;
        d[i].i=i;
    }
    for(int i=0;i<m;i++)
    {
        cin>>h[i];
    }
    sort(d,d+n,cmp);
    sort(h,h+m);
    int j=0;
    for(int i=0;i<n;i++)
    {
        while(j<m&&d[i].h>=h[j])
        {
			j++;
            ans[d[i].i]++;
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<ans[i]<<endl;
    }
}
posted @ 2020-02-23 12:50  凯在想peach  阅读(340)  评论(0编辑  收藏  举报