ykmakuのブログ

競技プログラミングをがんばるブログ

AtCoder Grand Contest 003 B - Simplified mahjong

  • 問題

B - Simplified mahjong

  • 解法

先頭から順に見ていく。ペアを作れるだけ作って、カードが余るなら(1枚だけ余る)そのカードを次の値のカード1枚と組み合わせる。これを繰り返す。

#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <numeric>
#include <cmath>

using namespace std;

typedef long long int ll;

#define all(x) x.begin(),x.end()

const ll mod = 1e9+7;
const ll INF = 1e9;
const ll MAXN = 1e9;

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

	ll ans = 0;
	for(int i = 0; i < n; i++){
		if(a[i] > 0){
			if(i>0 && a[i-1] == 1){
				ans += 1;
				a[i]--;
			}
			ans += a[i]/2;
			a[i] %= 2;
		}
	}

	cout << ans << endl;

	return 0;
}