AtCoder

ABC069 D問題(Grid Coloring)を解く

AtCoder_ABC069_D

AtCoder が提供しているABC(AtCoder Beginner Contest)069 D問題をC++で解いてみました。ABC069は、2017年8月6日21:00に実施されました。

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

D問題 Grid Coloring(Difficulty : 852)

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

ABC069 D問題 Grid Coloring

いくつかの配置方法があります。AtCoder Problems による Difficulty は 852 でした。

解答案

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

‘己’ の字の形のようにジグザグにマスを埋めていきます。20行目から41行目が該当します。

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

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

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

	vector<vector<int>> result(h, vector<int>(w));
	int i = 0;
	int j = 0;
	int now = 0;
	while (1) {
		result[i][j] = now + 1;
		--a[now];
		if (a[now] == 0) {
			++now;
			if (now >= n) {
				break;
			}
		}
		if (i % 2 == 0) {
			++j;
		} else {
			--j;
		}
		if ((j < 0) || (w <= j)) {
			if (j < 0) {
				j = 0;
			}
			if (w <= j) {
				j = w - 1;
			}
			++i;
		}
	}

	for (int i = 0; i < h; ++i) {
		for (int j = 0; j < w; ++j) {
			cout << result[i][j] << " \n"[j == w - 1];
		}
	}

	return 0;
}

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

最後に

己の字の他に、渦巻き状などいくつかの方法があります。

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

COMMENT

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

CAPTCHA