题目简述:
给定一个长度为n的数组,以及两个整数k和p,该数组可以通过复制在增加长度,可以复制k次,我们最后要找到保证后缀和至少为p的首元结点的数量
思路简述:
找到有多少个完整的原数组n,最后单独除了最后一个不完整的数组n即可;
cpp
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int a[N];
void solve()
{
int n,k,p,cnt=0;
cin >> n >> k >> p;
for(int i=1;i<=n;i++)
cin >> a[i];
for(int i=1;i<=n;i++)
a[i]=a[i-1]+a[i];//预处理前缀和
int b=a[n]*k-p;//a[n]*k是全部的,p是最低限度,二者相减是符合条件的区间和的最大值
if(b<0)
{
cout << 0 << endl;
return ;
}
int c=b/a[n];
int d=b-a[n]*c;
int i;
for(i=1;i<=n;i++)
{
if(a[i]>d)break;
}
// cout << a[i]<< ' ' << d << ' ' << a[i-1] << endl;
// cout << i << endl;
cout << c*n+i<<endl;
}
signed main()
{
int q;
cin >> q;
while(q--)
solve();
}