传送门:P1781 宇宙总统
更佳的阅读体验:洛谷 P1781 题解
简要题意:给定一个 $n$ 个高精度非负整数的序列,求序列中最大的元素和它的位置。
因为给定的票数是高精度整数,我们需要使用字符串存储。那么难点就变成了高精度整数如何比较大小。
我们发现,对于两个非负整数 $a$ 和 $b$,$a > b$ 当且仅当:
- 若 $a$ 与 $b$ 的位数不同,则 $a$ 的位数更多时。
- 否则,记从最高位开始,$a$ 与 $b$ 第一个不同的数字为 $a_0$ 和 $b_0$,有 $a_0 > b_0$ 时。
编写一个比较函数即可。
#include <iostream>
using namespace std;
const int N = 25;
int n, ans;
string s[N];
bool cmp(string &a, string &b) {
if (a.size() != b.size()) return a.size() > b.size();
for (int i = 0; i < a.size(); ++i)
if (a[i] != b[i]) return a[i] > b[i];
return false;
}
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; ++i) cin >> s[i];
for (int i = 1; i <= n; ++i) if (cmp(s[i], s[ans])) ans = i;
cout << ans << '\n' << s[ans] << '\n';
return 0;
}
当然,如果你不想写高精度(虽然本题不涉及高精度运算),你也可以使用 Python 快速过掉本题。
n = int(input())
a = [int(input().strip()) for _ in range(n)]
ans = 0
for i in range(n):
if a[i] > a[ans]: ans = i
print(ans + 1)
print(a[ans])