4.1ソート

今日アルゴリズムノートを学ぶ続けるために始めた、実際の学校前のビットと見なすことができます。主要な側面は、ソートアルゴリズムのメモの内容を検討した後、仕分けの一般的な方法のいくつかをまとめています。

4.1ソート

4.1.1選択ソート

非常に基本的なソートは、取り出した最小値Aを繰り返すのシーケンスで、Bの別のシーケンスに入れます

4.1.2挿入ソート

ソート処理に入れBにおけるAの一つの配列に配列の数、。

 

どちらの方法を理解することができ、1は、置かその後、ソートされ並べ替えを置くことです。

 

4.1.3sort機能

ソートソート機能がされ
必要とされます

 #include<algorithm>
    using namespce std;

関数呼び出しのソート(、+ nを、CMP);

定義するCMP必要性:ブールCMP(学生A、学生B)

1025 PAT Ranking (25 分)

プログラミング能力試験(PAT)は、浙江大学のコンピュータ科学技術大学が主催しています。各テストは、いくつかの場所で同時に実行することになっている、とranklistsは、試験後すぐにマージされます。今ではすべて正しくranklistsをマージし、最終順位を生成するプログラムを書くためにあなたの仕事です。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、正の数N(≤100)、テスト位置の数を含んでいます。次いで、N ranklistsはそれぞれ正の整数K(≤300)、被験者の数を含む行で始まり、登録番号(13桁の番号)と各被験者の総スコアを含む、次いでK線は、従います。行のすべての数字は、スペースで区切られます。

出力仕様:

各テストケースのために、第一列に被験者の総数を印刷します。そして、次の形式で最終ranklistを印刷します:

registration_number final_rank location_number local_rank

位置は、出力が最終ランクの順序を非減少でソートしなければならない1からNまで番号が付けられています。同じスコアを持つ被験者は、同じランクを持っている必要があり、出力はその登録番号の順番を非減少でソートする必要があります。

サンプル入力:

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

サンプル出力:

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

 

私は、テストポイントの最初の完全な配列決定した後、展開し、複数のテストポイントの場合に延びています

スキルがありますが、それはどれがはるかに簡単だろう、とソートする個々のテストポイントのnum個の数との関係で、すべてのテストの人々の数としてNUMを使用することです。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

struct student{     //定义合适的学生信息结构体
    char registration_number[14];
    int final_rank;
    int score;
    int location_number;
    int local_rank;
}stu[30010];

bool cmp(student a,student b)
{
    if(a.score!=b.score) return a.score>b.score;
    else return strcmp(a.registration_number,b.registration_number)<0;
}

int main()
{
    int N,K,num=0;        //N和K分别为测试点数量,和单个地点的测试者数量,num为总考生人数
    int i,j;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&K);
        for(j=0;j<K;j++)        //读入测试者的个人信息
        {
            scanf("%s %d",stu[num].registration_number,&stu[num].score);
            stu[num].location_number=i+1;
            num++;
        }
        sort(stu+num-K,stu+num,cmp);
        stu[num-K].local_rank=1;
        for(int k=1;k<K;k++)        //单个测试点进行排序
        {
            if(stu[num-K+k].score==stu[num-K+k-1].score)stu[num-K+k].local_rank=stu[num-K+k-1].local_rank;
            else stu[num-K+k].local_rank=num-K+k+1-(num-K);
        }
    }
    sort(stu,stu+num,cmp);
    stu[0].final_rank=1;
    for(int k=1;k<num;k++)        //单个测试点进行排序
    {
        if(stu[k].score==stu[k-1].score)stu[k].final_rank=stu[k-1].final_rank;
        else stu[k].final_rank=k+1;
    }
    printf("%d\n",num);
    for(int j=0;j<num;j++)
    {
        printf("%s %d %d %d\n",stu[j].registration_number,stu[j].final_rank,stu[j].location_number,stu[j].local_rank);
    }
    return 0;
}

 

 

公開された24元の記事 ウォンの賞賛6 ビュー473

おすすめ

転載: blog.csdn.net/qq_39965800/article/details/90450411