単純にソートを選択します。
- 1からnまで列挙私はのために、n個の動作のための時間。[1、I-1]の間隔は[I-1、n]は、順序付けされたランダムな間隔です。
- 疾患からの最小の要素を見つけるために各時間間隔、iは[1、i]はそう少し加え、順序付け間隔となるように、要素と交換しました。
アルゴリズム:
void seleteSort(){
for(int i = 0;i<n;i++){
int k = i;
for(int j = i;j<n;j++){
if(a[j]<a[k]){//选出[i,n]中最小的元素,下标为k
k=j;
}
}
int temp=a[i];
a[i] = a[k];
a[k] = temp;
}
}
挿入ソート:
- 挿入ソートと同様の選択ソートキーボードは、フロント部分に分類され、後部はソートされていません。
- 以前にソートされた配列内に挿入さの挿入に応じて前部要素から第2の位置に比べて開始します。
アルゴリズム:
int a[maxn],n;//n为元素个数,数组下标为1-n
void insertSort(){
for(int i = 2;i<=n;i++){//进行n-1趟排序
int temp = a[i],j = i;//temp临时存放a[i],j从i开始往前枚举
while(j>1&&temp<a[j-1]){//只要temp小于前一个元素a[j-1]
a[j] = a[j-1];//把a[j-1]后移一位至a[j]
j--;
}
a[j] = temp;
}
}
ソート機能:
- ソート機能は、ヘッダーの#include <アルゴリズム>を追加し、名前空間stdを使用しなければなりません。
- ソート()関数は3とり、2が必要とされるがあります。ソート(最初の要素のアドレス、エレメントの終わり次のアドレス)(オプション機能を比較)。
- 構造体のソート配列(書き込み機能CMP)
//结构体定义
struct node{
int x,y;
}ssd[10];
//若按照x从小到大来排序
bool cmp(node a,node b){
return a.x<b.x;
}
//若进行二级排序,即X相等时按照y的大小排序
bool cmp(node a,node b){
if(a.x!=b.x) return a.x<b.x;
else return a.y<b.y;
}
- STLでは、ベクターのみ、文字列、両端キューは、Aコンテナの使用をマップ、セット、の一種を使用することができるので、ソート順の使用を許可しない、要素自体が整然と、赤黒木の実装です。
PAT 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
回答:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct stu{
long long int reg;//¿¼ºÅ
int score,finrank,loca,locarank;//·ÖÊý,×îÖÕÅÅÃû£¬¿¼³¡£¬¿¼³¡ÅÅÃû
};
bool cmp(stu a,stu b){
return a.score==b.score?a.reg<b.reg:a.score>b.score;
}
int main(){
int N;
cin>>N;
vector<stu> fin;
for(int i = 1;i<=N;i++){
int m;
cin>>m;
vector<stu> v(m);
for(int j = 0;j<m;j++){
cin>>v[j].reg>>v[j].score;
v[j].loca = i;
}
sort(v.begin(),v.end(),cmp);
v[0].locarank = 1;
fin.push_back(v[0]);
for(int j = 1;j<m;j++){//Õâ¶ù²»ÒªÐ´µ½m
v[j].locarank = (v[j].score==v[j-1].score)?v[j-1].locarank:(j+1);
fin.push_back(v[j]);
}
}
sort(fin.begin(),fin.end(),cmp);
fin[0].finrank = 1;
for(int j =1;j < fin.size();j++){
fin[j].finrank = (fin[j].score==fin[j-1].score)?(fin[j-1].finrank):(j+1);
}
cout<<fin.size()<<endl;
for(int i = 0;i<fin.size();i++){
printf("%013lld %d %d\n",fin[i].reg,fin[i].finrank,fin[i].loca,fin[i].locarank);
}
return 0;
}