您的位置:首页 > 其它

Wannafly模拟赛5 A Split 【贪心】

2017-11-05 18:17 253 查看
题目: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
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: