Hatena::Grouptopcoder

TopCoder戦記

研究開発者・ellerのTopCoder挑戦記録。言語は主にJavaを使用しています。ドキュメンテーションコメントはSubmit完了後、ブログ掲載前に補完したものです。

2009-10-12SRM424 DIV2, SRM423 DIV2

SRM423 DIV2 Level One(250pt.)

| 21:25

http://www.topcoder.com/stat?c=problem_statement&pm=9966&rd=13514

『N*Nのマスにチェッカーが配置されている。チェッカーが上下左右に移動可能な時、すべてのチェッカーを四隅に集めるために必要な最小の手数を求めよ。』

全てのチェッカーについて、最も近い四隅に移動する手数を算出して和を求めます。std::min()関数を用いることでコードをまとめ、可読性を確保しています。

// 202.30 pt.

#include <vector>
#include <algorithm>
using namespace std;

class TheSimpleGame {
	public:
	int count(int n, vector<int> x, vector<int> y) {
		int steps = 0;
		for (int i = 0; i < x.size(); ++i) {
			int minX = min(x[i] - 1, n - x[i]);
			int minY = min(y[i] - 1, n - y[i]);
			steps += minX + minY;
		}
		return steps;
	}
};