题解 P1068 【分数线划定】
冒泡排序
暴力冒泡,不用结构体
大佬们的算法太高深了!!!本蒟蒻写一篇不用结构体的!!! 当我们在用冒泡排序时,交换满足条件的数据时,完全可以将这个数据的序号以及其他项全部交换,这样其实就起到了结构体的作用!!!!!
本蒟蒻代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int a[10010],b,n,c[10010],ans,d[10010],e[10010];//以上不解释。
int main()
{
cin>>n>>b;//根据题目要求读入。
int r;
r=floor(b*1.5);//求出分数线名次。
for(int i=1;i<=n;i++)cin>>c[i]>>a[i];//读入不解释。
for(int i=1;i<=n-1;i++)
{
for(int w=1;w<=n;w++)
{
if(a[w]<a[w+1])//如果前项分数小于后项分数,交换两项分数以及序号,这样就起到了交换位置的作用。
{
swap(a[w],a[w+1]);
swap(c[w],c[w+1]);
}
if(a[w]==a[w+1]&&c[w]>c[w+1])//当分数相等但是序号大时
{
swap(a[w],a[w+1]);//其实这个可以省略。
swap(c[w],c[w+1]);//不能省!!!交换序号==交换位置
}
}
}
ans=a[r];
int t=0;
cout<<ans<<" ";//输出分数线
for(int i=1;i<=n;i++)//找满足条件的分数并将分数以及序号存到单独数组中。
if(a[i]>=ans)
{
d[i]=c[i];
e[i]=a[i];
t++;
}
cout<<t<<endl;//输出录取人数。
for(int i=1;i<=n;i++)//输出。
if(e[i]!=0)cout<<d[i]<<" "<<e[i]<<endl;
return 0;
}
轻松AC~~