P5956 题解
推荐
我的博客
题意
求在
前置证明
在
以十进制为例
设
可知
该规律可推广至
思路
先算出题目给的这些数字的和,再扣除一个它除
代码
粘贴不可取,洛谷同维护。
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
long long n;long long q;
long long a[1000005];
long long p[1000005];//前缀和
long long sum;
long long erfen(long long k,long long l,long long r)//二分答案
{
long long ans=-1;
while(l<=r)
{
long long mid=(l+r)/2;
if(p[mid]>k)
{
ans=mid;r=mid-1;
}
else
{
l=mid+1;
}
}
return ans;
}
int main()
{
cin>>n>>q;
for(long long i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i]*i;
}
if(sum%(n-1)!=0)
{
a[sum%(n-1)]--;
}
for(long long i=0;i<n;i++)
{
p[i]=p[i-1]+a[i];
}//先删后算
while(q--)
{
long long k;
cin>>k;
cout<<erfen(k,0,n-1)<<endl;
cout<<"1";
}
return 0;
}