Inbox (100500) 题解
题目大意
有已读或未读的邮件,可以进行以下操作:
- 读完邮件后回到邮件列表;
- 回到列表后选取任意一个未读邮件读;
- 读完一个邮件之后读这个邮件的下一个或者上一个邮件;
问他最少多少次操作能读完所有邮件。
解题思路
首先可以记录一下有几封邮件未读,因为如果都是已读那么就不用进行任何操作,直接输出 \(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;
}