题解:P17865 [FJCPC 2026] 排考场
思路
检测到关键词:最大可能的最小列间距。发现其间距越大可放的人数越少,有单调性,考虑二分答案。
每次二分出来的数就看这样子间距考场人数最大能不能放下
计算每一个考场可放人数。不难发现其就是将一列人和
Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
struct node
{
int r,c;
}a[100005];
bool check(int x)
{
int can=0;
for(int i=1;i<=m;i++)
{
int cnt=a[i].c/(x+1)+(bool)(a[i].c%(x+1));
can+=cnt*a[i].r;
}
return can>=n;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>a[i].r>>a[i].c;
int l=0,r=1e18,mid,ans=-1;
while(l<=r)
{
mid=l+r>>1;
if(check(mid))
{
ans=mid;
l=mid+1;
}else r=mid-1;
}
cout<<ans;
return 0;
}