P9124求助
  • 板块学术版
  • 楼主I_will_AKIOI我心依旧
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/5/3 11:06
  • 上次更新2023/10/23 16:49:15
查看原帖
P9124求助
565265
I_will_AKIOI我心依旧楼主2023/5/3 11:06

复杂度 O(nlog⁡tm)O(n\log tm),数据范围可以过,#1 AC,#2 ∼\sim #10 TLE,感觉出现了死循环

传送门

#include<bits/stdc++.h>
using namespace std;
long long a[101],b[101],c[101];
long long t,n,tc,tM;
long long j,ans=3e18,s;
long long l,r,mid;
long long check()
{
  j=3e18;
  for(int i=1;i<=n;i++) 
  {
    if(c[i]-(tc-mid)*a[i]<b[i]) return 0;
    j=min(j,(c[i]-(tc-mid)*a[i])/b[i]);
    //求出tm减少的最小值 
  }
  return j;
}
int main()
{
  cin>>t;
  while(t--)
  {
    cin>>n>>tc>>tM;
    for(int i=1;i<=n;i++) scanf("%lld %lld %lld",&a[i],&b[i],&c[i]);
    l=0;
    r=tc-1;
    while(l<=r)
    {
      //先二分tc减少的值,再求出tM减少的最小值
      mid=l/2+r/2;
      s=check();//减少常数 
      if(s) 
      { 
        r=mid-1;
        if(mid+tM-s<ans)//花费的钱比答案少 
        {
          if(tM<s) ans=mid;//防止答案为负数
          else ans=mid+tM-s;
        }
      }
      else l=mid+1;
    }
    printf("%lld\n",ans);
  }
  return 0;
}
2023/5/3 11:06
加载中...