AtCoder が提供しているABC(AtCoder Beginner Contest)329 のB問題をC++とPythonで解いてみました。ABC329は、2023年11月18日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 Next(Difficulty : 20)
問題はリンク先をご覧ください。
重複がない2番目に大きな数字を出力します。AtCoder Problems による Difficulty は 20 でした。
解答案
C++ プログラム例(ABC329B)
ソートして最大値を求めます(12行目)。最大値と異なる、次に大きな数字を result に格納します(16、17行目)。以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a.begin(), a.end(), greater<int>());
int result;
for (int i = 1; i < n; ++i) {
if (a[i] != a[0]) {
result = a[i];
break;
}
}
cout << result << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC329B)
Python 版も基本的な考え方は同じです。以下となります。
"""AtCoder Beginner Contest 329 B"""
n = int(input())
a = list(map(int, input().split()))
a.sort(reverse=True)
result = 0
for i in range(1, n):
if a[i] != a[0]:
result = a[i]
break
print(result)
リスト処理を以下のように書くこともできます(6行目の右辺)。こちらの方が Python らしいのかもしれません。
"""AtCoder Beginner Contest 329 B"""
n = int(input())
a = list(map(int, input().split()))
m = max(a)
result = max([a[i] for i in range(n) if a[i] != m])
print(result)
こちらも「AC」と判定されました。
最後に
今回は、B問題も解きやすい難易度でした。
引き続き ABC の問題を紹介していきます。