AtCoder

ABC368 A問題(Cut)を解く

AtCoder_ABC368_A

AtCoder が提供しているABC(AtCoder Beginner Contest)368 A問題をC++とPythonで解いてみました。ABC368は、2024年8月24日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

A問題 Cut(Difficulty : 20)

問題の詳細は、リンク先をご覧ください。

ABC368 A問題 Cut

配列を前後に分けて考えます。AtCoder Problems による Difficulty は 20 でした。

解答案

C++ プログラム例(ABC368A)

カードの山の下から $K$ 枚を、山の上に動かすということは、山の上から $N-K$ 枚を山の下に動かすと考えることができます。配列の先頭を $N-K$ として出力します(14行目)。

以下が、C++プログラムです。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n, k;
	cin >> n >> k;
	vector<int> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}

	for (int i = 0; i < n; ++i) {
		cout << a[(i + (n - k)) % n] << " \n"[i == n -1];
	}

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC368A)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 368 A"""
n, k = map(int, input().split())
a = list(map(int, input().split()))

for i in range(n):
    print(a[(i + (n - k)) % n], end=" ")

スライス記法を使って、前後を入れ替えたリスト result を生成することもできます(5行目)。以下となります。

"""AtCoder Beginner Contest 368 A"""
n, k = map(int, input().split())
a = list(map(int, input().split()))

result = a[n - k:] + a[:n - k]
print(*result)

どちらも「AC」と判定されました。

最後に

コンテストのレートはあまり変化しませんが、楽しくコンテストに参加しています。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA