Wannafly模拟赛5 A Split 【贪心】

来源:互联网 发布:网络销售沟通术语 编辑:程序博客网 时间:2024/05/09 22:32

题目:https://www.nowcoder.com/acm/contest/18/A

题意:

你有一个大小为��的����������,每次你可以从你已有的����������中选择一个大小不为1的����������,设他的大小为��,然后把它分裂成��和��−��,其中1≤��<��,这样你获得的收益是��∗(��−��)给定��,��,求最少分裂几次才能得到至少��的收益

分析:
最后分的大小尽量平均得到的M最大。二分分的次数,然后判断是否可以使得收益>=M即可。

#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>#include <set>#include <queue>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int N=1e3+9;typedef long long LL;typedef pair<int,int> pii;int a[N];int solve(int s,int x){    for(int i=0;i<x;i++)a[i]=s/x;    for(int i=0;i<s%x;i++)a[i]++;    int ans=0;    int sum=0;    for(int i=0;i<x;i++){        ans+=sum*a[i];        sum+=a[i];    }    return ans;}int main(){    int s,m;    scanf("%d%d",&s,&m);    for(int i=1;i<s;i++){        if(solve(s,i+1)>=m){            printf("%d\n", i);            return 0;        }    }    printf("-1\n");    return 0;}