torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces #152, Division 2, A : Cupboards

概要

両開きの戸を持つ戸棚が n 個ある。
左右のそれぞれの戸について、全てを同じ状態にしたい。
(左は全て閉じているか空いているか && 右は全て閉じているか空いているか)
戸の初期状態が与えられるので、動かす戸の最小数を答えよ。

解法

左右それぞれについて、全て閉めるか全て開けるのに必要な数を求めて足します。
空いている戸の数を a とすると、min( n, n - a ) 。

コード

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

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	int n;
	cin >> n;

	int cnt1 = 0, cnt2 = 0;

	REP( i, 0, n )
	{
		int a, b;
		cin >> a >> b;

		cnt1 += a;
		cnt2 += b;
	}

	cout << min( n - cnt1, cnt1 ) + min( n - cnt2, cnt2 ) << endl;

	return 0;
}