勤奋的涟漪

Time Limit:1000MS  Memory Limit:65536K
Total Submit:7 Accepted:1

Description

涟漪进入集训队后,他会去实验室训练或者去操场锻炼。 接下来n天,每天的情况是一下4种中的一种: 1.当天体育馆关门了和没有训练赛 2.当天体育馆关门了和有训练赛 3.当天体育馆开放和没有训练赛 4.当天体育馆开放和有训练赛 涟漪知道之后n天的情况。 涟漪每一天可以休息,或者打训练赛(当天有训练赛)或者运动(当天体育馆开放)。 涟漪要制定一个训练计划,决定每天干什么,但是涟漪不会连续两天都运动或者连续两天都打训练赛, 请帮涟漪找出她最少休息的天数(她不打训练赛和运动)。 休息的时候,她会做下面的数学题

Input

第一行一个整数 n(1<=n<=100) 第二行有n个数a1,a2,a3,....an(0<=ai<=3)) ai=0 ,代表第一种情况 ai=1,代表第二种情况 ai=2 ,代表第三种情况 ai=3 ,代表第四种情况

Output

输出 一个数 表示(涟漪休息的天数) 乘以(数学题的答案的积)。

Sample Input

7
1 3 3 2 1 2 3

Sample Output

0

Source

ac代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
	/*
	qian-->1:????
	qian-->2:????
	qian-->3:????
	*/
	int i,n,cnt=0,qian=1;
	int a[200]={0};
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
	{
		if(qian==1 && a[i]==0 || qian==2 && a[i]==2 || qian==2 && a[i]==0 || qian==3 && a[i]==0 || qian==3 && a[i]==1)
			cnt++,qian=1;
		else if(qian==2)
			qian=3;
		else if(qian==3)
			qian=2;
		else
		{
			if(a[i]==1) qian=3;
			else if(a[i]==2) qian=2;
			else
			{
				if(a[i+1]==1) qian=2;
				else
					qian=3;
			}
		}
	}
	printf("%d",cnt*(-24));
	return 0;
}

注意:当他休息时除外的所有天数都是在工作(刷题or运动),但可能那天运动馆开门并且有训练赛,这时就要考虑下一天做什么,不能与下一天的事件重复,若下一天休息就随便选