1. 程式人生 > 實用技巧 >2020牛客暑期多校訓練營(第三場)

2020牛客暑期多校訓練營(第三場)

A.Clam and Fish

題意:1.遊戲有n階段,從1到n編號
2.4種類型的階段(0~3)
0:0魚 0蛤
1:0魚 1蛤
2:1魚 0蛤
3:1魚 1蛤
每個階段,都可以執行如下4個動作中的一個:
1.有一蛤,可以製作成一包魚餌,接下來階段用來抓魚
2.有一魚,抓這魚不需要魚餌,魚餌數不變
3.至少有一魚餌,用魚餌抓魚,即使這個階段沒魚,魚餌數減1
4.什麼都不幹

分析:2和3階段有魚就抓魚,直接累加到答案裡面,然後每次遇到一個1,就製作一包魚餌,然後在接下來遇到0的時候,判斷有沒有魚餌,有就抓一條,然後最後多出來的魚餌的1型別,可以製作一半魚餌用來給另一半抓魚。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
	int t;
	cin >> t;

	while (t--)
	{
		string s;
		int res = 0, n;
		cin >> n >> s;
		//魚餌數量
		int cnt = 0;
		for (int i = 0; i < n; ++i)
		{
			if (s[i] == '2' || s[i] == '3') ++res;
			else if (s[i] == '0')
			{
				if (cnt) ++res, --cnt;
			}
			else if (s[i] == '1') ++cnt;
		}
		//多出來的魚餌
		if (cnt != 0)
		{
			//一半的魚餌給另一半抓魚
			res += cnt / 2;
		}
		cout << res << endl;
	}
	
	return 0;
}