ABC 374 C 蒟蒻二分求调

题目总版

Treap_Kongzs @ 2024-10-05 21:43:05

钛蒻了。。。二分写炸了。。。但惊奇的是TLE,并没WA

思想是二分最小员工数,check()就是判断这个数能不能由各部员工加出来。

然后。。。就没有然后了

code:

#include<bits/stdc++.h>
using namespace std;
const int maxn=25;
const int maxr=2e9;

int arr[maxn];

bool check(int num,int n)
{
  int res=0;
  for(int i=1;i<=n;i++)
  {
    if(res+arr[i]>num)return false;
    if(res+arr[i]==num)return true;
  }
  return false;
}

int main()
{
  int n=0,res=0;
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>arr[i];
  }
  sort(arr+1,arr+n+1);
  int l=1;
  int r=maxr;
  while(l<=r)
  {
    int mid=(l+r)>>1;
    if(check(mid,n)==true)
    {
      res=mid;
      r=mid;
    }
    else
    {
      l=mid+1;
    }
  }
  cout<<res;
  return 0;
}

谢谢各位大佬!


by SunsetVoice @ 2024-10-05 21:44:07

完全不需要二分。N\le 20


by Treap_Kongzs @ 2024-10-05 21:45:45

@SunsetVoice

啊?所以就暴力扫?(

但答案的值域不是[1,20\times 10^8]吗?


by D_C_Z @ 2024-10-05 21:47:53

@Treap_Kongzs 暴力看这个数在第一组还是在第二组 O(2^n) 秒了


by Wind_love @ 2024-10-05 21:48:35

@Treap_Kongzs 不是暴力扫答案值域 是暴力找每种情况


by SunsetVoice @ 2024-10-05 21:48:48

@Treap_Kongzs ?2^{20} 啊,直接枚举每个组算最小值即可


by Treap_Kongzs @ 2024-10-05 21:51:45

@D_C_Z @I_AK_IOI_1114 @SunsetVoice

所以原来是P2392的弱化吗?难怪我P2392也没过(

谢谢各位大佬,已关


|