codeforces 830C Bamboo Partition

题目链接

codeforces 830C Bamboo Partition

分析

首先我们需要知道什么样的d是满足的.对于任意的 i

[a[i]+d1d]a[i]k

因此

dk+a[i]

注意条件项中的 [a[i]+d1d] 在这中由于 d 只有 a[i] 种可能,因此,可以分段枚举d

AC code

#include
#define pb push_back
#define mp make_pair
#define PI acos(-1)
#define fi first
#define se second
#define INF 0x3f3f3f3f
#define INF64 0x3f3f3f3f3f3f3f3f
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define ms(x,v) memset((x),(v),sizeof(x))
using namespace std;
const int MOD = 1e9+7;
const double eps = 1e-8;
typedef long long LL;
typedef long double DB;
typedef pair<int,int> PII;
const int maxn=  1e5+10;

int a[maxn];
LL n,k;
bool ok(LL d){
    LL ret =0;
    for (int i=0 ; i1+d)/d;
    }
    return ret * d <= k;
}
int main() {

    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    cin>>n>>k;
    for(int i=0 ; icin>>a[i],k+=a[i];
    LL ans =0;
    for(LL i=1 ; i<=sqrt(k)+1 ; ++i){
        if(ok(i))ans = max(ans,i);
        if(ok(k/i)) ans = max(ans,k/i);
    }
    cout << ans<<"\n";

    return 0;
}

你可能感兴趣的:(算法刷题)