CCF CSP 20190902 小明種蘋果(續) 100分 小明真累

       【題目概述

       小明種蘋果(續)相較於第一題難度有了一定的提升,蘋果樹排列成了一個圓,需要考慮蘋果從樹上掉落的情況以及處理蘋果的疏果操作。

 

       【輸入輸出

       輸入要嚴格按照題目要求,注意不要輸錯。最後輸出疏果後的剩餘的蘋果總數T,發生蘋果意外掉落的樹的棵樹D,連續三個樹發生蘋果掉落情況的組數E。

 

       【思路

       相較於第一題難度,第二題難度有了一定的提升,需要處理的難點有

       1. 正確處理小明重新統計蘋果樹的情況,並判斷是否發生蘋果掉落。

       這裏可以通過比較第二次之後的mi是否大於0來判斷小明是否重新統計了蘋果樹;判斷蘋果是否掉落可以與之前的疏果後的蘋果總數比較,若不一致則發生蘋果掉落。

       2. 判斷連續三個樹發生蘋果掉落情況的組數。

       設置flag,記錄所有蘋果樹發生蘋果的掉落情況,然後進行類似flag1^flag2^flag3==1的操作來判斷是否連續三個樹發生蘋果掉落,並記錄組數。

 

       具體解釋請看代碼分析:

#include <iostream>
#include <vector>
using namespace std;
//定義蘋果數結構體
struct appletree
{
	//記錄nums中的數據個數
	int num;
	//記錄蘋果樹疏果後剩餘的蘋果數
	vector<int> nums;
	//1表示有蘋果意外掉落的情況發生,0則表示無掉落情況發生
	bool flag;
};

int main()
{
	//創建蘋果樹集合
	vector<appletree> appnums;
	//N爲蘋果棵樹,M表示改行後面需要輸入的整數個數
	int N, M;
	cin >> N;
	//疏果後的剩餘的蘋果總數
	int appsums = 0;
	//發生蘋果意外掉落的樹的棵樹
	int errornum = 0;
	//連續三個樹發生蘋果掉落情況的組數
	int listnum = 0;

	for (int i = 0; i < N; i++)
	{
		cin >> M;
		appletree appnum;
		appnum.num = 0;
		appnum.flag = 0;
		int mi;
		for (int j = 0; j < M; j++)
		{
			cin >> mi;
			//記錄第一次統計蘋果樹的數量
			if (mi > 0 && appnum.num == 0)
			{
				appnum.nums.push_back(mi);
				appnum.num++;
			}
			//判斷是否重新統計,若是則在nums後插入重新統計的數據
			else if (mi > 0 && appnum.num > 0)
			{
				appnum.nums.push_back(mi);
				//判斷是否發生掉落情況,若是則flag=1
				if (mi != appnum.nums[appnum.num - 1])
				{
					appnum.flag = 1;
				}
				appnum.num++;
			}
			//處理疏果情況,更新疏果後的蘋果數
			else
			{
				appnum.nums[appnum.num - 1] += mi;
			}
		}
		//記錄發生蘋果意外掉落的樹的棵樹
		if (appnum.flag == 1)
			errornum++;
		//所有蘋果樹疏果後的蘋果總數
		appsums += appnum.nums[appnum.num - 1];
		appnums.push_back(appnum);//將數據添加到蘋果樹集合中
	}
	
	//處理連續三個樹發生蘋果掉落的情況
	for (int i = 0; i < N; i++)
	{
		//當發現flag=1時表示有蘋果意外從樹上掉落
		if (appnums[i].flag == 1)
		{
			//判斷該樹的前後是否flag都等於1,若是則listnum++
			if (appnums[(i + 1 + N) % N].flag == 1 && appnums[(i - 1 + N) % N].flag == 1)
			{
				listnum++;
			}
		}
	}

	cout << appsums << " " << errornum << " " << listnum << endl;
	return 0;
}

測試數據集:

測試數據集
輸入1:
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
輸出1:
222 1 0


輸入2:
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
輸出2:
39 4 2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章