题目描述:
麻雀帕西和青蛙弗洛格是好玩伴,它们经常一起比赛唱歌。但冬天来了,青蛙弗洛格 冬眠了,它的睡眠深度是 D。麻雀帕西觉得好无聊,于是它想办法要唤醒弗洛格。麻雀帕 西只会唱 N 首歌,第 i 首歌的音量是 Si。每听完一首歌,青蛙弗洛格的睡眠深度就会减少, 减少的值等于它听到的歌的音量。当青蛙弗洛格的睡眠深度大于 0 的时候,它会继续冬眠, 当睡眠深度小于或者等于 0 时,它就会被唤醒了。麻雀帕西会从第 1 首歌开始唱,唱完第 1 首歌后如果弗洛格还没醒就接着唱第 2 首歌,如果唱完第 2 首歌弗洛格还没醒就接着唱 第 3 首歌,依次类推,如果唱完第 N 首歌后弗洛格还没醒,那么麻雀帕西又重新从第 1 首 歌开始唱,就像循环播放音乐一样,一直到青蛙弗洛格被唤醒为止,那么麻雀帕西总共唱 了多少首歌?
输入格式:
第一行,两个整数: D 和 N。
第二行,N 个整数,空格分开,第 i 个整数就是第 i 首歌的音量 Si。
输出格式:
一个整数,麻雀帕西总共唱了多少首歌后,弗洛格会被唤醒?
样例输入:
【样例输入1】 13 3 5 2 4 【样例输入2】 3 3 5 2 4 【样例输入3】 21 3 2 1 3
样例输出:
【样例输出1】 4 (麻雀帕西唱完第 1 首歌后,青蛙弗洛格睡眠深度变成8,麻雀帕西唱完第 2 首歌后,青蛙弗洛格睡眠深度变成6,麻雀帕西唱完第 3 首歌后,青蛙弗洛格睡眠深度变成2,麻雀帕西再次唱完第 1 首歌后,青蛙弗洛格睡眠深度变成-3,青蛙弗洛格会被唤醒。) 【样例输出2】 1 (麻雀帕西唱完第 1 首歌后,青蛙弗洛格睡眠深度变成-2,青蛙弗洛格会被唤醒。) 【样例输出3】 11
提示:
【数据规模】
对 80%的数据,1 ≤ D ≤ 10000,1 ≤ N ≤ 50,1 ≤ Si ≤ 100。
另外 20%的数据,1 ≤ D ≤ 2000000000,1 ≤ N ≤ 50,1 ≤ Si ≤ 3。
时间限制: 1000ms
空间限制: 256MB
这道题我们就需要运用一些数学知识来优化程序。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[101],cnt,i=1,sum;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>a[i],sum+=a[i];
cnt+=(n/sum)*m;
n-=(n/sum)*sum;
while(n>0){
n-=a[i];
cnt++,i++;
if(i>m)i=1;
}
cout<<cnt;
return 0;
}