Bonetrousle HackerRank 数学 + 思维题
发布时间:2022-10-30 16:13:13 280 相关标签: # ios
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle
给定一个数n,和k个数,1--k这k个,要求选择b个数,使得这b个数的和等于n。
首先考虑最小值,在1--k中选择前b个数,是最小的,记为mi。最大值,后b个数相加,记为mx
注意到一个东西:如果mi <= n <= mx。那么是绝对可行的。因为mi总能增加1(同时保证满足要求),所以在这个区间里面的,都是可行解。
所以首先从mi开始枚举,每次把第B个数变成最大值k(第b - 1个数改成k - 1....依次类推,因为不能重复用数字)
则总能枚举到mi >= n。然后输出方案即可。
bug点:后b个数太大了,会爆LL。所以,当后面的数相加到 >= n的时候,够了,证明n是 <= mx的了,有可行解。
然后对着模拟即可。复杂度O(b)


#include
#include
#include
#include
#include
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
#include
#include
#include
#include
#include
View Code
文章来源: https://blog.51cto.com/u_15833059/5779346
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报