【CCF】201909-2小明分苹果

在这里插入图片描述
在这里插入图片描述
解题思路:
利用一个(标记数组)来标记苹果是是否有掉落情况。特别需要强调的是:要考虑到同一个苹果树可能有多次掉落的情况,所以在标记的时候应该先判断一下这棵树有没有被标记,否则只能拿到50分,仅仅一个条件50分可见其重要性。
判断相邻连续三颗苹果树的掉落情况时可以考虑一下循环队列模除,但我觉得用一个for语句,再加上两种情况的判断比较容易一些。
下面是通过的满分代码:

#include <iostream>
#include <string.h>
using namespace std;
int Tree[1005]; 
int Drop[1005];

int main() {
	
	int N,T=0,D=0,E=0;
	cin>>N;  
	
	memset(Drop,0,sizeof(Drop[N]));  //标记数组
	int num=0,n=N;  //num是Drop数组的下标,代表掉落的苹果树编号
	while(n--)
	{
		int m;
		cin>>m;

		
		for(int i=0;i<m;i++)
			cin>>Tree[i];
			
			
			int before,t; //before用来记录每次记录之前的 旧苹果数量
			t=Tree[0];
			before=t;
		for(int i=1;i<m;i++)
		{
			
			if(Tree[i]<=0)
			 {
			 	t+=Tree[i];
			 	before=t; 
			 }
		    if(Tree[i]>0)
			 {
			 	if(before>Tree[i]) //判断是不是同一颗苹果树发生的掉落情况
			 	{
			 		if(Drop[num]==0) 
			 	  D++;
			 	  
				  Drop[num]=1;	
				}
			 	  
			 	t=Tree[i];
			 }
		}
		T+=t;
		num++; 
	}
	   //判断相邻连续三棵苹果树掉落情况
		for(int i=1;i<N-1;i++)
		{
			if(Drop[i-1]&&Drop[i]&&Drop[i+1])
			  E++;
		}
		if(Drop[1]&&Drop[0]&&Drop[N-1])
		    	E++;
	    if(Drop[0]&&Drop[N-2]&&Drop[N-1])
		    	E++;
		    	
	cout<<T<<" "<<D<<" "<<E<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值