Description
恩杰学长最近在养生,需要含着牛奶糖才能写作业和刷OJ。已知:
(a) 每个牛奶糖可以含嘴里10分钟,并且只有在“每个作业刚开始的时候”学长才能够吃新的牛奶糖
(b) 学长马上要参加ACM算法比赛,所以每间隔30分钟他会花5分钟刷OJ(间隔时间从上次刷完OJ结束开始计算,即使在做作业过程中到了30分钟的间隔时间,他也会中断下来先刷OJ)
© 如果在某个作业开始前,发现嘴里还有糖,但是不足以维持完成接下来的作业时长,就需要吃新的糖。嘴里有多颗糖时,每颗糖的消耗速度是一样的
恩杰学长今晚有N个作业,完成这些作业所需时间为a1,a2…aN。学长刚刷了会OJ开始准备做作业,那么他最少需要吃多少颗牛奶糖才能完成所有作业?
Input
第一行输入一个正整数N( 0 < N <= 10)代表作业的数量
第二行输入N个正整数ai以空格相隔,代表接下来要顺序完成的每项作业所需的时间(0 < ai <= 10)
【输入的测试数据保证一定能够完成作业】
Output
输出一个整数K代表最少需要的牛奶糖数
Sample Input
5
1 2 3 4 5
Sample Output
2
这题就是个大模拟,就是边界可能会考虑不周,比如最后一个作业完成时刚好满足距离上次刷oj30分钟,此时是不用刷oj的,因为题目结束边界的是所有作业完成。
#include <iostream>
using namespace std;
int main(void)
{
int n;
cin >> n;
int candy_cnt = 0;
int tot_time = 0;
int candy_last_time = 0;
while (n--)
{
int a;
cin >> a;
tot_time += a;
if (n && tot_time >= 30 || !n && tot_time > 30)
{
tot_time -= 30;
a += 5;
}
if (candy_last_time < a)
{
candy_last_time = 10;
++candy_cnt;
}
candy_last_time -= a;
}
cout << candy_cnt << endl;
return 0;
}