博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2668
阅读量:4572 次
发布时间:2019-06-08

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

将原来所有的的i按照d/i上取整=k的划分为各个区间[next,now),这区间里的ans值就等于(now-next)*k

初始now=n+1,k=1,然后每次next就等于d/i,k依次递增,实际上,不是每一个k的next和now所指代的区间都有意义,即next<now,所以,每当遇到一个这种没有意义的next和now时,就通过d/(now-1)上取整找到新的k,这样就可以大大节省时间。

View Code
1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 int main() 7 { 8 long long d,n; 9 while(scanf("%lld%lld",&d,&n))10 {11 if(n==0&&d==0)12 break;13 long long ans=0;14 long long now=n+1,k=1,next;15 while(now>1)16 {17 next=d/k+(d%k!=0);18 if(now<=next)19 {20 next=now-1;21 k=d/next+(d%next!=0);22 }23 else24 ans+=(now-next)*k,k++,now=next;25 }26 printf("%lld\n",ans);27 }28 return 0;29 }

转载于:https://www.cnblogs.com/tmeteorj/archive/2012/09/10/2679301.html

你可能感兴趣的文章
IBM lotus9.0测试版即将公测
查看>>
xml常用方法
查看>>
Cube Stacking(并差集深度+结点个数)
查看>>
AndroidStudio3更改包名失败
查看>>
jq 删除数组中的元素
查看>>
js URL中文传参乱码
查看>>
Leetcode 367. Valid Perfect Square
查看>>
UVALive 3635 Pie(二分法)
查看>>
win系统查看自己电脑IP
查看>>
Backup&recovery备份和还原 mysql
查看>>
一道面试题及扩展
查看>>
Unity 3D 我来了
查看>>
setup elk with docker-compose
查看>>
C++ GUI Qt4学习笔记03
查看>>
Java基础回顾 —反射机制
查看>>
c# 前台js 调用后台代码
查看>>
2017-02-20 可编辑div中如何在光标位置添加内容
查看>>
$.ajax()方法详解
查看>>
jquery操作select(增加,删除,清空)
查看>>
Sublimetext3安装Emmet插件步骤
查看>>