#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int a[n],b[n]; for(int i=0;i<n;i++) cin>>a[i]>>b[i]; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if(a[i]==a[j]) { b[i]+=b[j]; } } } int max=0; for(int i=0;i<n;i++) { if(max<b[i]) max=b[i]; } for(int i=0;i<n;i++) { if(max==b[i]) { cout<<a[i]<<" "<<b[i]<<endl; break; } } return 0; }时间优化
时间: 2024-01-19 09:03:16 浏览: 66
万能头文件#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std;
这段代码可以通过排序来进行优化,具体做法是,将输入的 a 和 b 值组成的二元组按照 a 值从小到大排序,然后顺序遍历这个排序后的数组,统计每个 a 值对应的 b 值的和,直到遇到一个 a 值与前面不同的元素,就可以输出之前统计的 a 值和 b 值的和了。
代码示例:
```c++
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int> b) {
return a.first < b.first;
}
int main() {
int n;
cin >> n;
vector<pair<int, int>> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i].first >> nums[i].second;
}
sort(nums.begin(), nums.end(), cmp); // 按照 a 值排序
int sum = nums[0].second, max_sum = sum, max_a = nums[0].first;
for (int i = 1; i < n; i++) {
if (nums[i].first == nums[i - 1].first) { // 如果 a 值相同,累加 b 值
sum += nums[i].second;
} else { // 否则更新最大值,并记录新的 a 值和 b 值的和
if (sum > max_sum) {
max_sum = sum;
max_a = nums[i - 1].first;
}
sum = nums[i].second;
}
}
if (sum > max_sum) { // 处理最后一组数据
max_sum = sum;
max_a = nums[n - 1].first;
}
cout << max_a << " " << max_sum << endl;
return 0;
}
```
时间复杂度为 O(n log n),空间复杂度为 O(n)。
阅读全文