torus711 のアレ

主に競技プログラミングの問題について書きます.PC 以外だと数式が表示されないかもしれないです

TopCoder, SRM 637, Division 2, Level 1 : GreaterGameDiv2

問題概要

 2N 枚のカードを使った 2 人ゲームをする。各カードには [ 1, 2N ] の整数値が書かれている。
 ゲーム開始前、プレイヤーはそれぞれ N 枚ずつのカードを配られ、ゲームに使う順番を決める。
 ゲームは N ターンからなり、各ターンにプレイヤーは事前に決めた順番通りカードを一枚ずつ開示する。書かれている値が大きいカードを出したプレイヤーは 1 点を得る。
 各プレイヤーがカードを出す順番を表す 2 つの配列 snuke, sothe が与えられる。N ターン経過後に、Snuke が得る得点を求めよ。

解法

 問題文で提示されたルール通りに計算することで解くことができます。すなわち、有効な i に関して、snuke_i > sothe_i となっているものの数が答えです。

コード

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )

class GreaterGameDiv2
{
public:
	int calc( vector <int> snuke, vector <int> sothe )
	{
		int res = 0;
		REP( i, 0, snuke.size() )
		{
			res += snuke[i] > sothe[i];
		}
		return res;
	}
};