题目:
样例:">样例:">输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150
分析:简单模拟。
第一次:全过。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N = 0, index = 0, score = 0, num_max = 0;//定义的变量最好初始化
cin >> N;
vector<int> book(N+1, 0);
while(N--){
cin >> index >> score;
book[index] += score;
num_max = num_max < index ? index : num_max;
}
index = 1; score = book[index];
for(int i=1; i<=num_max; ++i){
if(score < book[i]){
index = i;
score = book[i];
}
}
cout << index << ' ' << score;
return 0;
}
第二次:使用一个循环,测试点数据没过。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N = 0, index = 0, score = 0,id_max = 0, score_max = 0;//定义的变量最好初始化
cin >> N;
vector<int> book(N+1, 0);
while(N--){
cin >> index >> score;
book[index] += score;
if(score_max<book[index]){
score_max = book[index];
id_max = index;
}
}
cout << id_max << ' ' << score_max;
return 0;
}
错误分析:问题在于每次输入一组数据都有可能导致该结果是最大值。因此当新输入的值更新之后且等于未更新时的最大值,就需要更新当前最大值的下标以及最大值。
正确代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N = 0, index = 0, score = 0,id_max = 0, score_max = 0;//定义的变量最好初始化
cin >> N;
vector<int> book(N+1, 0);
while(N--){
cin >> index >> score;
book[index] += score;
if(score_max <= book[index]){ //仅仅修改了判断条件
score_max = book[index];
id_max = index;
}
}
cout << id_max << ' ' << score_max;
return 0;
}