题解 P1271 【【深基9.例1】选举学生会】

· · 题解

这是一道由黄色降为橙色的深基题目

主要就是排序

个人觉的得它作为一道橙题还是比较合适的

下面我说说直接用sort做的办法

#include<bits/stdc++.h>
//来个万能头
using namespace std;
int main()
{
    int a[2000001],n,m;//注意数组范围,不要开小了
    scanf("%d%d",&n,&m);//来个输入
    for(int i=1;i<=m;i++)
    scanf("%d",&a[i]);
    sort(a+1,a+m+1);//排序
    for(int i=1;i<=m;i++)
    printf("%d ",a[i]);//输出
    return 0;
}

这应该是比较简单的做法了,输入,排序,然后直接输出 另外我再给大家介绍一下我最初的做法 这应该是比较基础的方法

#include<cstdio>
using namespace std;
int main()
{
    int a[2000001],n,b,m,c;//定义一下,开数组
    scanf("%d%d",&n,&m);//输入
    for(int i=1;i<=m;i++)
    scanf("%d",&a[i]);//输入数组
    for(int i=1;i<=m;i++){
        for(int j=i;j>0;j--){//倒着往回找
            if(a[j]>=a[i]){//看看有没有比现在的数大的
                b=a[j];
                a[j]=a[i];
                a[i]=b;//换位置
            }
        for(int k=i;k<=m;k++){//再往后找
        if(a[k]<a[i])//找找有没有比现在的数小的
        {
            c=a[k];
            a[k]=a[i];
            a[i]=c;//换位置    
        }
        }
    }
    }
    for(int i=1;i<=m;i++)
    printf("%d ",a[i]);//输出
    return 0;
}

这个代码理论上应该是没错的,但是由于题目的数据范围比较大,会超时(我WA了6次就是因为TLE),数据范围较小的情况下可以参考一下

本蒟蒻的第五篇题解,如有不足之处请大佬帮忙指正