AtCoder が提供しているABC(AtCoder Beginner Contest)069 D問題をC++で解いてみました。ABC069は、2017年8月6日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
D問題 Grid Coloring(Difficulty : 852)
問題の詳細は、リンク先をご覧ください。
いくつかの配置方法があります。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 の問題を紹介していきます。