求调!码风良好
查看原帖
求调!码风良好
665592
sSkYy楼主2025/6/18 11:07

如题。

find 找的是第 ii 个人收到了几次命令,由此从 chk 里找出最后接到的命令是第几次。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,k;
int a[N];

int chk(int x,int y){
	int sum=0,mx=x*a[y];
	for(int i=1;i<=n;i++){
		sum+=mx/a[i];
		if(i<y&&mx%a[i]==0) sum--;
		if(sum>k) return -1; 
	}
	if(sum>k) return -1;
	return sum;
}

int find(int i){
	int l=1,r=k,res=-1;
	while(l<=r){
		int mid=l+r>>1;
		int tmp=chk(mid,i);
		if(tmp!=-1) l=mid+1,res=tmp;
		else r=mid-1;
	}
	return res;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>k>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=n;i++) cout<<find(i)<<" ";
	return 0;
}
2025/6/18 11:07
加载中...