ss_yangzirui @ 2024-11-05 17:01:21
题目描述 麻雀帕西和青蛙弗洛格是好玩伴,它们经常一起比赛唱歌。但冬天来了,青蛙弗洛格冬眠了,它的睡眠深度是 D。麻雀帕西觉得好无聊,于是它想办法要唤醒弗洛格。麻雀帕西只会唱 N 首歌,第 i 首歌的音量是 Si。每听完一首歌,青蛙弗洛格的睡眠深度就会减少,减少的值等于它听到的歌的音量。当青蛙弗洛格的睡眠深度大于 0 的时候,它会继续冬眠,当睡眠深度小于或者等于 0 时,它就会被唤醒了。麻雀帕西会从第 1 首歌开始唱,唱完第1 首歌后如果弗洛格还没醒就接着唱第 2 首歌,如果唱完第 2 首歌弗洛格还没醒就接着唱第 3 首歌,依次类推,如果唱完第 N 首歌后弗洛格还没醒,那么麻雀帕西又重新从第 1 首歌开始唱,就像循环播放音乐一样,一直到青蛙弗洛格被唤醒为止,那么麻雀帕西总共唱了多少首歌? 输入 第一行,两个整数: D 和 N。 第二行,N 个整数,空格分开,第 i 个整数就是第 i 首歌的音量 Si。 输出 一个整数,麻雀帕西总共唱了多少首歌后,弗洛格会被唤醒? 提示 【数据规模】 对 80%的数据,1 ≤ D ≤ 10000,1 ≤ N ≤ 50,1 ≤ Si ≤ 100。 另外 20%的数据,1 ≤ D ≤ 2000000000,1 ≤ N ≤ 50,1 ≤ Si ≤ 3。
输入样例 13 3 5 2 4 输出样例 4
by SSqwq_ @ 2024-11-05 19:01:05
@ss_yangzirui 帮你做完了。
直接减去循环节即可,时间复杂度
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans,n,d,sum,a[1000001];
void work(){
cin>>d>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
d-=a[i];
ans++;
sum+=a[i];
if(d<=0){
cout<<ans<<"\n";
return;
}
}
ans+=(d/sum);
d%=sum;
for(int i=1;i<=n;++i){
d-=a[i];
ans++;
if(d<=0){
cout<<ans<<"\n";
return;
}
}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int T=1;
// cin>>T;
while(T--){
work();
}
return 0;
}
by ss_yangzirui @ 2024-11-06 12:13:34
@SSqwq_ 谢谢