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