Inbox (100500) 题解

题目传送门

题目大意

有已读或未读的邮件,可以进行以下操作:

  1. 读完邮件后回到邮件列表;
  2. 回到列表后选取任意一个未读邮件读;
  3. 读完一个邮件之后读这个邮件的下一个或者上一个邮件;

问他最少多少次操作能读完所有邮件。

解题思路

首先可以记录一下有几封邮件未读,因为如果都是已读那么就不用进行任何操作,直接输出 \(0\)

如果有未读的邮件,那么操作数就加一;

要再判断一下下一封邮件是否已读,如果是,就要返回列表;

最后要注意,读完最后一封邮件时,是不需要返回列表的,所以操作数要减一。

代码

#include <bits/stdc++.h>
#define ri register int
using namespace std;
int a[1001],ans=0,sum=0;
int main() {
	int n;
	cin>>n;
	for(ri i=1;i<=n;i++){
		cin>>a[i];
		if(a[i]) sum++;
	}
	if(!sum) {
		cout<<0<<'\n';
		return 0;
	}
	for(int i=1;i<=n;i++) {
		if(a[i]) {
			ans++;
			if(!a[i+1]) ans++;
		}
	}
	cout<<ans-1<<'\n';
	return 0;
}
posted @ 2022-12-25 07:53  Ggsddu_zzy  阅读(13)  评论(0编辑  收藏  举报