题目描述: 输入n个人的学号及成绩,按成绩从大到小输出每个人的学号及成绩,成绩相同的按照输入的先后顺序输出。
【输入】 输入第一行为一个整数,n,表示n个数。(1 ≤ n ≤ 100000) 输入第二行为空格隔开的n个整数,即每个人的学号。 输入第三行为空格隔开的n个整数,即每个人的成绩
(1 ≤ 每个整数 ≤ 1000000000,保证学号各不相同)
【输出】 输出一行,为空格隔开的n个正整数,即排好序后的每个人的学号
【输入样例1】 5 3 2 7 6 8 3 3 5 5 4
【输出样例1】 7 6 8 3 2
【输入样例2】 4 1 2 3 4 2 3 4 3
【输出样例2】 3 2 4 1 题目描述: 输入n个人的学号及成绩,按成绩从大到小输出每个人的学号及成绩,成绩相同的按照输入的先后顺序输出。
【输入】 输入第一行为一个整数,n,表示n个数。(1 ≤ n ≤ 100000) 输入第二行为空格隔开的n个整数,即每个人的学号。 输入第三行为空格隔开的n个整数,即每个人的成绩
(1 ≤ 每个整数 ≤ 1000000000,保证学号各不相同)
【输出】 输出一行,为空格隔开的n个正整数,即排好序后的每个人的学号
【输入样例1】 5 3 2 7 6 8 3 3 5 5 4
【输出样例1】 7 6 8 3 2
【输入样例2】 4 1 2 3 4 2 3 4 3
【输出样例2】 3 2 4 1
#include <iostream>
using namespace std;
int n;
struct student
{
int number, score;
};
student stu[100005],a[100005];
void gbpx(int l, int r)
{
if (l==r)
return;
int mid = (l+r)/2;
gbpx(l,mid);
gbpx(mid+1,r);
int al = l,ar = mid+1,aa = l;
while(al <= mid and ar <= r)
{
if (stu[al].score >= stu[ar].score)
{
a[aa++] = stu[al++];
}
else
{
a[aa++] = stu[ar++];
}
}
while(al <= mid)
{
a[aa++] = stu[al++];
}
while(ar <= r)
{
a[aa++] = stu[ar++];
}
for (int x = l;x <= r;x++)
{
stu[x] = a[x];
}
}
int main()
{
cin >> n;
for (int x = 1;x <= n;x++)
{
cin >> stu[x].number >> stu[x].score;
}
gbpx(1,n);
for (int x = 1;x <= n;x++)
{
cout << stu[x].number << " ";
}
return 0;
}
第一个输入样例代进去输出是这样的:
7 3 5 8 3
我就很奇怪,错就错吧,5这个数据哪里来的?
帮帮孩子吧,实在看不出来了,头都晕了