传送门:P1781 宇宙总统

更佳的阅读体验:洛谷 P1781 题解


简要题意:给定一个 $n$ 个高精度非负整数的序列,求序列中最大的元素和它的位置。

因为给定的票数是高精度整数,我们需要使用字符串存储。那么难点就变成了高精度整数如何比较大小。

我们发现,对于两个非负整数 $a$ 和 $b$,$a > b$ 当且仅当:

  1. 若 $a$ 与 $b$ 的位数不同,则 $a$ 的位数更多时。
  2. 否则,记从最高位开始,$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])
最后修改:2025 年 08 月 09 日
如果觉得我的文章对你有用,请随意赞赏