1. 程式人生 > >1032 挖掘機技術哪家強——C/C++實現

1032 挖掘機技術哪家強——C/C++實現

題目

1032 挖掘機技術哪家強 (20 point(s))

為了用事實說明挖掘機技術到底哪家強,PAT 組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。

輸入格式:

輸入在第 1 行給出不超過 10​5​​ 的正整數 N,即參賽人數。隨後 N 行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編號(從 1 開始連續編號)、及其比賽成績(百分制),中間以空格分隔。

輸出格式:

在一行中給出總得分最高的學校的編號、及其總分,中間以空格分隔。題目保證答案唯一,沒有並列。

輸入樣例:

6
3 65
2 80
1 100
2 70
3 40
3 0

輸出樣例:

2 150

演算法

程式碼1是將學校編號作為下角標,分數作為一編號為下標陣列元素的值進行儲存,逐個累加,並比較保留最大值。

這道題很明顯地也可以採用map。見程式碼2.

程式碼2是使用map,這方面類似於陣列,但是很方便。

程式碼

1、C

//PAT1032V1
#include <stdio.h>
int main(){
	int n,i,j,id=0,max=0;
	scanf("%d",&n);
	int a,sum[100001]={0};
	for(i=0;i<n;i++){
		scanf("%d %d",&j,&a);
		sum[j]+=a;
		if(max<sum[j]){
			id=j;
			max=sum[j];	
 		}
	}
	printf("%d %d",id,max);
}

2、C++

#include <iostream>
#include <map>
using namespace std;
int main(){
	int N,maxid=0,maxscore=0;	cin>>N;
	map<int,int> m;
	for(int i=0;i<N;i++){
		int id,score;
		cin>>id>>score;
		m[id]+=score;
		if(maxscore<m[id]){
			maxid=id;
			maxscore=m[id];
		}	
	}
	cout<<maxid<<" "<<maxscore;	
}