CCF-小明种苹果(续)

CCF-小明种苹果(续)

\qquad 写在前面的话:这个题目是我第一次参加CCF这个比赛的试题,但是当时并没有做出来,时隔两年做这一题,感悟如下:题目本身并不困难,没有复杂的算法过程,只需要模拟即可。但是即使现在做我也不是一次AC的,所以这篇博客主要的目的就是用于记录这个错误。题目的PDF文档我放在了本文的最后位置,AC的代码如下:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2000 + 5;
int a[maxn], sign[maxn];

signed main(){
	int N;
	scanf("d", &N);
	int temp;
	for(int i = 0; i < N; i++){
		int M;
		scanf("%d", &M);
		for(int j = 0; j < M; j++){
			scanf("%d", &temp);
			if(temp > 0){
				if(j == 0) a[i] = temp;
				else{
					if(temp != a[i]){
						sign[i] = 1;
						a[i] = temp;
					}
				}
			}
			else a[i] += temp;
		}
	}
	int T = 0, D = 0, E = 0;
	for(int i = 0; i < N; i++){
		T += a[i];
		if(sign[i] == 1) D++;
		//***********************//
		if(sign[i] == 1 && sign[(i + 1) % N] == 1 && sign[(i + 2) % N] == 1)
		/************************//
		E++;
	}
	printf("%d %d %d\n", T, D, E);
	return 0;
}
\qquad 代码主体我不做分析了,认真看都看的懂。注意看代码中我使用***********//包括起来的部分——if(sign[i] == 1 && sign[(i + 1) % N] == 1 && sign[(i + 2) % N] == 1),这一条语句在代码中的作用的用于检测是否连续的三个苹果都有掉果子的现象发生。但是我一开始写的语句是这样的—— if(sign[i] == 1 && sign[(i + 1) % N] == 1 && sign[(i - 1) % N] == 1),与正确的语句唯一的不同时将(i + 2) % N; 改写为了(i - 1) % N;好像是完成的同一个功能但是却存在一个BUG——当i是0的时候i - 1就等于-1,此时-1对N求余将得到-1(我希望得到的肯定是N-1),所以这是一个错误,也导致第一轮只得到了80分。

关于-1对一个整数求余还是得到-1的结论,感兴趣的朋友可以亲自在电脑上试一下。

题目的PDF如下,有两个【样例1输入】请忽略第一个,或者可以直接上官网查看原题http://118.190.20.162/view.page?gpid=T93

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值