PAT A1055ザ・世界最も豊かな(25分)

フォーブス誌は毎年、世界の裕福な人々の年間ランキングに基づいて、億万長者のリストを公開しています。今、あなたはこの仕事をシミュレートするが、唯一の年齢層の特定の範囲の人々に集中することになっています。これは、N人の純資産与えられた、ある、あなたは彼らの年齢の与えられた範囲内でM最も裕福な人を見つける必要があります。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。N(≤10:それぞれの場合のために、最初の行は2つの正の整数含ま5 -人の総数、及びK(≤10)3) -クエリの数。次いで、N行はそれぞれ、名前(スペースなしでこれ以上8以下の文字列)、年齢((0、200]の整数)、及び純資産[-10で(整数含まれ、従う6、10 6 ]) 。人の最後のクエリのK線があり、それぞれ3つの正の整数が含まれます。M(≤100) -年齢の範囲である出力の最大数、および[アミン、Amaxの]を行のすべての数でありますスペースで区切られています。

出力仕様:

Xは1次に、出力範囲[アミン、Amaxの]で自分の年齢とM裕福な人々を開始するクエリの数である:各クエリ、ラインケース#Xの最初の印刷のために。各個人の情報は形式で、行を占め:
名前年齢Net_Worth
ザ・出力は純資産の非昇順でなければなりません。場合等しいworthsがあり、それは年齢の非減少順でなければなりません。worthsと年齢の両方が同じである場合、出力は名前のアルファベット順に非減少でなければなりません。何の二人は、すべての3つの情報の同じ共有していないがあることが保証されています。場合には誰もが、出力なしを発見されませんでした。

サンプル入力:

12 4
Zoe_Bill 35 2333
Bob_Volk 24 5888
Anny_Cin 95の999999の
ウィリアムズ30 -22
シンディ76 76000
アリス18 88888
Joe_Mike 32 3222
マイケル5 300000
ローズマリー40 5888
ドビー24 5888
ビリー24 5888
無人5 0
4 15 45
4 30 35
5 95
1 45 50

サンプル出力:

ケース#1:
アリス18 88888
ビリー24 5888
Bob_Volk 24 5888
ドビー24 5888
ケース#2:
Joe_Mike 32 3222
Zoe_Bill 35 2333
ウィリアムズ30 -22
ケース#3:
Anny_Cin 95 999999
マイケル5 300000
アリス18 88888
シンディ76 76000
ケース#4:
なし

質問の意味:

総数は、クエリの数を入力し、プログレッシブ一人一人の名前、年齢、資産を入力し、最後にクエリの最大値、最小値と最大値の年齢の数など、検索条件を入力し、進歩的な問い合わせを各エントリの条件に従って出力満たすの名前の人の状態、年齢、資産、人は出力なし存在しません場合。

アイデア:

全職員の最初の選別のための人物(1)、すべてのソートされた技術を横断する各クエリの必要性のために、出力が制約条件を満たしたら、既に定義された条件の数が出力数が少ないクエリMの最大数、最小年齢よりも備えますアミンの年齢と最大年齢Amaxの間。

コード:

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

struct person{
	char name[10];
	int age,worth;
}per[100010];
bool cmp(person a,person b){
	if(a.worth!=b.worth) return a.worth>b.worth;
	else if(a.age!=b.age) return a.age<b.age;
	else return strcmp(a.name,b.name)<0;
}

int main(){
	int N,K;
	scanf("%d %d",&N,&K);
	for(int i=0;i<N;i++){
		scanf("%s %d %d",per[i].name,&per[i].age,&per[i].worth);
	}
	sort(per,per+N,cmp);
	for(int i=0;i<K;i++){
		printf("Case #%d:\n",i+1);
		int M,Amin,Amax,count=0;//count记录已输出的人数 
		scanf("%d %d %d",&M,&Amin,&Amax);
		for(int j=0;j<N;j++){
			if(count<M&&per[j].age>=Amin&&per[j].age<=Amax){
				printf("%s %d %d\n",per[j].name,per[j].age,per[j].worth);
				count++;
			}
			if(count==M) break;
		}
		if(count==0) printf("None\n");
	}
	return 0;
} 

用語集:

フォーブス「フォーブス」
億万長者億万長者
シミュレート模倣
クエリのクエリ

公開された26元の記事 ウォンの賞賛0 ビュー466

おすすめ

転載: blog.csdn.net/PanYiAn9/article/details/104251813