题目描述
小T作为班级的班长,承担着班级的各项事务,今天班主任交给了小T一个重要的任务,学校的音乐会就要开始了,要小T帮忙协助音乐会的举办,但是小T依然有自己的学业安排,小T想兼顾自己学业的同时协助音乐会的开展,音乐会还有n天举行,在这n天里,每天可能有4种状态:
- 这天没有学业的课程任务,也没有音乐会的任务。
- 这天没有学业的课程任务,有音乐会的任务。
- 这天有学业的课程任务,但没有音乐会的任务。
- 这天有学业的课程任务,也有音乐会的任务。
小T每天可以选择休息,或者完成学业任务(前提这天有),或者完成音乐会的任务(前提这天有),小T不希望连续2天同时做学业任务或者同时做音乐会的任务,小T同时又对自己很严格,小T想知道在这样的要求下,小T最少能够休息多少天,这个问题太难了,小T才小学一年级,还算不过来,需要你帮帮他。
输入格式
第一行一个整数n表示天数。
第二行用空格隔开的n个整数ai表示这天的状态。
输出格式
第一行一个数字表示最少的休息天数。
样例数据
样例输入#1
4
1 3 2 0
样例输出#1
2
数据范围
对于30%的数据,1≤n≤10。
对于50%的数据,1≤n≤1000。
对于100%的数据,1≤n≤100000,0≤ai≤3。
---------------------------------------------------------------------------------------------------------------------------------
这道题的话,我们不需要去想什么复杂的代码
我们看一下,解决这道题的关键是用最优的方法来做作业和做音乐作业,那什么情况下我们要考虑最优解呢?似乎只有在连续两天有学业的课程任务,也有音乐会的任务,只有在这个时候,我们才要考虑一下今天做什么,明天才不会休息(其他情况都不用考虑最优解,比如连续两天都有作业,那肯定有一天休息,没有最优解)
所以,这道题的思路很简单,我们只需要把数组a遍历一遍,看看那些天要休息,直接休息
---------------------------------------------------------------------------------------------------------------------------------
#include<bits/stdc++.h>
using namespace std;
typedef long long l;//将long long改成l,只要写l就表示long long
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//普通的加速
int n;
int a[114514],q=0,w=0,s=0;
cin>>n;
//有n个人,用数组a来存储
for(int i=1; i<=n; i++) {
cin>>a[i];//读入
}
for(int i=1; i<=n; i++) {
if(a[i]==0) {//如果今天什么作业也没有
s++;//那只能休息了,用s代表休息天数
q=0;
w=0;
/*用q代表音乐会的任务,用w代表学业任务
如果q==0,说明没有连续两天做音乐会的任务,现在就可以做音乐会的事
如果w==0,说明没有连续两天做学业的任务,现在就可以做学业的事
如果q==1,说明没有昨天在做音乐会的任务,今天不能做
如果w==1,说明没有昨天在做学业的任务,今天不能做
不管q和w是0还是1,过完今天,他们肯定都可以等于0
(因为今天在休息,就算昨天在做什么,今天休息完肯定能继续做)
*/
} else if(a[i]==1) {//如果只有音乐会的任务
if(q==0) {//如果昨天没做音乐
q++;//将音乐变成1
w=0;//由于今天没做学业,今天过完学业肯定能做
} else {//否则就是昨天做了音乐
s++;//休息次数++
q=0;//跟上面一样,不多介绍
w=0;
}
} else if(a[i]==2) {//如果只有学业
if(w==0) {
w++;//学业=1
q=0;//音乐休息完成
} else {
s++;//否则就做不了学业
q=0;
w=0;
}
} else {//否则就是比较麻烦的,又有音乐,又有学业
if(q==1) {
w++;
q=0;//如果音乐做了,今天只能做学业
} else if(w==1) {
q++;//如果学业做了,今天只能做音乐
w=0;
} else {
q++;//否则就是q和w都等于0,那就做音乐
q=0;//这行我也不太懂,如果去掉就WA了
//如果有哪位大神看懂了评论区给我讲一下好吗?球球了
}
}
}
cout<<s;//输出答案
return 0;
}
我真的看不懂q=0啊,脑袋都要炸了