博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces - 287B-Pipeline(二分)
阅读量:4322 次
发布时间:2019-06-06

本文共 2304 字,大约阅读时间需要 7 分钟。

Vova, the Ultimate Thule new shaman, wants to build a pipeline. As there are exactly n houses in Ultimate Thule, Vova wants the city to have exactly n pipes, each such pipe should be connected to the water supply. A pipe can be connected to the water supply if there's water flowing out of it. Initially Vova has only one pipe with flowing water. Besides, Vova has several splitters.

A splitter is a construction that consists of one input (it can be connected to a water pipe) and x output pipes. When a splitter is connected to a water pipe, water flows from each output pipe. You can assume that the output pipes are ordinary pipes. For example, you can connect water supply to such pipe if there's water flowing out from it. At most one splitter can be connected to any water pipe.

 The figure shows a 4-output splitter

Vova has one splitter of each kind: with 2, 3, 4, ..., k outputs. Help Vova use the minimum number of splitters to build the required pipeline or otherwise state that it's impossible.

Vova needs the pipeline to have exactly n pipes with flowing out water. Note that some of those pipes can be the output pipes of the splitters.

Input

The first line contains two space-separated integers n and k (1 ≤ n ≤ 1018, 2 ≤ k ≤ 109).

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Output

Print a single integer — the minimum number of splitters needed to build the pipeline. If it is impossible to build a pipeline with the given splitters, print -1.

Examples

Input

4 3

Output

2

Input

5 5

Output

1

Input

8 4

Output

-1

代码:

#include
#include
#include
#include
using namespace std;long long n,k;bool f(long long mid) { long long s; s=(k+1)*k/2-mid*(mid-1)/2-(k-mid); if(mid==k) s=mid; if(s>=n) return true; else return false;}int main() { scanf("%lld%lld",&n,&k); long long sum=0; sum=k*(k+1)/2-k+1; long long ans=k-1; long long l=2,r=k+1; long long mid=(l+r)/2; if(sum
0) { //mid=(l+r)/2; if(f(mid)) { l=mid; mid=l+(r-l)/2; } else { mid=l+(mid-l)/2; } } long long ans=0; ans=k+1-mid; printf("%lld\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/Staceyacm/p/10781882.html

你可能感兴趣的文章
cocos2d-x学习笔记
查看>>
MySql中的变量定义
查看>>
Ruby数组的操作
查看>>
hdu1181暴搜
查看>>
解码字符串 Decode String
查看>>
json学习笔记
查看>>
工具:linux 性能监控工具-nmon
查看>>
fatal error C1853
查看>>
Ural 1001 - Reverse Root
查看>>
玩转webpack之webpack的entry output
查看>>
java 操作mongodb查询条件的常用设置
查看>>
黑马程序员_java基础笔记(02)...java语言基础组成
查看>>
关于缓存击穿
查看>>
对innodb 拷贝文件实现数据库的方式(转)
查看>>
python知识点 2014-07-09
查看>>
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
小白的python进阶历程------05.占位符
查看>>