题目传送门 \color{orangered}\text{题目传送门} 题目传送门
题意
先吐槽一下AT的
LaTeX
\LaTeX
LATEX。
我们有一个播放列表,其中包含
N
N
N 首编号为
1
,
.
.
.
,
N
1,...,N
1,...,N 的歌曲。
歌曲
i
i
i 持续
A
i
A_i
Ai 秒。
播放播放列表时,歌曲将按照 1 、 2 、 . . . N 1、2、...N 1、2、...N 的顺序播放。当歌曲 N N N 结束时,播放列表会重复,再次从歌曲 1 1 1 开始。播放歌曲时,下一首歌曲不播放;当一首歌曲结束时,下一首歌曲立即开始。
在播放列表开始播放后的 T T T 秒,正在播放哪首歌曲?另外,自那首歌开始以来已经过去了多少秒?
分析
用
s
u
m
sum
sum 记录一个周期歌曲的总时间。然后从
1
1
1 到
n
n
n 循环,用
s
u
m
2
sum2
sum2 记录当前的时间,如果
s
u
m
2
>
t
m
o
d
s
u
m
sum2>t\bmod sum
sum2>tmodsum,就是说明最后停到了这首歌,输出
i
i
i,第二行输出 t%sum-(sum2-a_i)
,仔细理解一下。
s
u
m
2
−
a
i
sum2-a_i
sum2−ai 是指这个循环内这首歌放之前是多长时间,
t
m
o
d
s
u
m
t\bmod sum
tmodsum 是指这个循环内歌停止的时候的时间,相减便得到这首歌停止之前播了多长时间。
代码
#include<bits/stdc++.h>
using namespace std;
long long n,t,sum=0,sum2=0,a[100100];
int main()
{
scanf("%lld%lld",&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
}
for(int i=1;i<=n;i++)
{
sum2+=a[i];
if(sum2>t%sum)
{
cout<<i<<endl;
cout<<t%sum-(sum2-a[i])<<endl;
return 0;
}
}
return 0;
}