AtCoder

ABC283 B問題(First Query Problem)を解く

AtCoder_ABC283_B

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 を出力する。

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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA