AtCoder が提供しているABC(AtCoder Beginner Contest)283 のB問題をC++とPythonで解いてみました。ABC283は、2022年12月24日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 First Query Problem(Difficulty : 35)
問題はリンク先をご覧ください。
ABC283 B問題 First Query Problem
クエリを処理していく問題です。AtCoder Problems による Difficulty は、35 でした。
解答案
クエリを解いていく問題は、ABC278 D問題でも扱われました。今回の方が、かなり取り組みやすくなっています。
問題を解く方針を書きだします。
- N と 数列 A を読み込む。
- Q を読み、以下を Q 回繰り返す。
- type を読み込む。
- type = 1 の場合、k と x を読み、Ak を x にする。
- type = 2 の場合、k を読み、Ak を出力する。
- type を読み込む。
C++ プログラム例(ABC283B)
方針に従い、プログラムします。なお、配列は 0 オリジンです。クエリの k の値から 1 を引いて参照しています。
#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];
}
int q;
cin >> q;
for (int i = 0; i < q; ++i) {
int type;
cin >> type;
if (type == 1) {
int k, x;
cin >> k >> x;
a[k - 1] = x;
} else if (type == 2) {
int k;
cin >> k;
cout << a[k - 1] << endl;
}
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC283B)
Python 版も方針に従いプログラムしました。クエリの type によって、入力数が異なるため、query リストに代入して、そのまま処理しました。
"""AtCoder Beginner Contest 283 B"""
n = int(input())
a = list(map(int, input().split()))
q = int(input())
for i in range(q):
query = list(map(int, input().split()))
if query[0] == 1:
a[query[1] - 1] = query[2]
elif query[0] == 2:
print(a[query[1] - 1])
こちらも「AC」と判定されました。
最後に
問題に書かれていることを素直に実装する問題でした。素直な実装が計算量が少ないため、計算量に配慮する必要もありませんでした。
引き続き ABC の問題を紹介していきます。