本文同步发于洛谷博客,您也可以在题解页面访问。

这题真还挺简单的(红题不都是吗?)

废话不多说!开始!(这也不废话吗)

理解题意

题目描述

题中说得很清楚了

输入格式

本题有多组数据。首先,输入整数 $t$ ,表示数据组数 $t(1\le t\le100)$ ,对于每组数据,输入整数 $n$ ,表示一共浇花或没浇花的天数 $(1\leq n\leq100)$ ,然后输入 $n$ 个整数 $a_1,a_2,\dots a_n\ (a_i=0$ 或 $a_i=1)$ , $a_i=1$ 表示第 $i$ 天浇花了,否则表示第 $i$ 天没浇花。

输出格式

对于每组数据,如果花活着,输出花 $n$ 天后的高度,如果花死了,输出 $-1$ 。

解法

这道题我们用模拟的解法。用一变量 $h$ 表示花的高度, $a_1,a_2,\dots a_n$ 浇表示第几天浇花了没。一开始让 $h$ 为 $1$ ,从第 $1$ 天起每天都会有四种情况:

  • 如果今天浇花而且昨天也浇花了, $h+5$ 。
  • 如果今天浇花而且昨天没浇花, $h+1$ 。
  • 如果今天没浇花而且昨天浇花了, $h$ 不变。
  • 如果今天没浇花而且昨天也没浇花,花就死掉了,无需继续判断,直接输出 $-1$ 。

但是,这样有一个漏洞:如果第一天没浇花,程序会认为第 $1$ 天和第 $0$ 天(初始状态)都没浇花,然而误判为花死掉了,显然,我们哪怕凭生活经验来看,这都是不可能的,更别说本题了。怎么办?特判。当 $i=1$ 时忽略掉上面的第一、第三、第四条,就可以了。

我们看一组数据:

1
2
3
4
5
6
7
8
9
10
Simple Input
4
3
1 0 1
3
0 1 1
4
1 0 0 1
1
0

四组数据,一组一组看。

  1. 一共三天,第一天浇花了,高度+1,第三天浇花了,高度+1,三天后高度为1+1+1=3;

  2. 一共三天,第二天浇花了,高度+1,第三天浇花了,且第二天浇花了,高度+5,三天后高度为1+1+5=7;

  3. 共有四天,第一天浇花了,高度+1,但第二、三天都没浇花,花死掉了,输出-1,结束;

  4. 共有一天,这天没浇花,高度不变,一天后高度为1.

所以,输出应该是:

1
2
3
4
5
Simple Output
3
7
-1
1

核心CODE::

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i]; //输入
}
for(int i=1;i<=n;i++){
if(i==1){
if(a[i]==1){
h++;
}
continue;
}
if(a[i]==1&&a[i-1]==1){
h+=5;
}
else if(a[i-1]==1&&a[i]==0){

}
else if(a[i-1]==1&&a[i]==0){
h++;
}
else{
cout<<-1<<endl;
break;
}
}