求大佬帮帮忙,谢谢
3 个赞
第3题也不会
3 个赞
题面呢?
4 个赞
忘了你们看不到
2 个赞
我思路会,是在删除最多的0,删除最小的1,做到协调
3 个赞
错误代码?
4 个赞
第2题有思路了,但二分的check函数不会
3 个赞
//第2题
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100010];
int check(int mid){
//不会
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
long long l=0,r=1e15,mid;
while(l+1<r){
mid=(l+r)/2;
if(check(mid))l=mid+1;
else r=mid-1;
}cout<<l;
return 0;
}
3 个赞
bool check(int mid) {
int cnt = 0, res = 0;
for (int i = 1; i <= n; i++) {
if (a[i] + res < mid) {
cnt += (mid - a[i] - res + i - 1) / i; //操作次数
res += (mid - a[i] - res + i - 1) / i * i; //下一个数加的值
}
}
return cnt <= k; //判断操作次数是否 <= k
}
求解决方案
4 个赞
第3题也讲讲吧我思路和check都不会
我先给个赞
3 个赞
可我提交试一下WA0
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100010];
int check(long long mid){
long long cnt=0,res=0;
for(int i=1;i<=n;i++){
if(a[i]+res<mid){
cnt+=(mid-a[i]-res+i-1)/i;
res+=(mid-a[i]-res+i-1)/i*i;
}
}return cnt<=k;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
long long l=0,r=1e15,mid;
while(l+1<r){
mid=(l+r)/2;
if(check(mid))l=mid+1;
else r=mid-1;
}cout<<l;
return 0;
}
3 个赞
不开long long见祖宗 我开了long long 53分
3 个赞
好像二分模板写混了
3 个赞
![]()
3 个赞
第二个A了吗?
4 个赞
A了呀
3 个赞
没事了
3 个赞
???
3 个赞
第3题怎么二分
3 个赞

