博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4342 History repeat itself 二分
阅读量:7226 次
发布时间:2019-06-29

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

先二分找到这个非平方数,然后对一个一个区间进行求和的预处理。要注意边界问题。

代码如下:

#include 
#include
#include
#include
using namespace std;typedef long long Int;Int N, num;long long int sum[1000005];Int bsearch(Int l, Int r) { Int mid, left; while (l <= r) { mid = (l + r) >> 1; left = mid - (int)floor(sqrt(double(mid))); if (N > left) { l = mid + 1; } else { r = mid - 1; } } return l;}void pre(){ int lim = 1 << 16; for (int i = 1; i <= lim; ++i) { sum[i] = sum[i-1]+1LL * (2*i+1) * i; }}int main(){ Int T, pos, s; long long int ans; pre(); scanf("%I64d", &T); while (T--) { ans = 0; scanf("%I64d", &N); pos = bsearch(1, 1LL<<32); s = (int)floor(sqrt(double (pos)))-1; ans += (s+1)*(pos - (s+1)*(s+1)+1); printf("%I64d %I64d\n", pos, ans + sum[s]); } return 0;}

转载于:https://www.cnblogs.com/Lyush/archive/2012/08/07/2627251.html

你可能感兴趣的文章
codewars020: The Clockwise Spiral 数字顺时针螺旋矩阵
查看>>
ios 下拉刷新
查看>>
Django在Windows系统下的安装配置
查看>>
懒到极致:对mybatis的进一步精简
查看>>
Android学习之OTA Update
查看>>
Maven Multi-environment package
查看>>
JMM-java内存模型
查看>>
iOS的soap应用(webservice) 开发
查看>>
Delphi listview 点击列头排序
查看>>
android preference page
查看>>
mysql索引挑选
查看>>
关于冰岛足球的段子
查看>>
在 Windows 中安装 Laravel 5.1.X
查看>>
TeamViewer 9发布-在Linux下安装运行
查看>>
Centos7 Gitea安装教程 - 一款易搭建,运行快的Git服务器
查看>>
CentOS minimal 网络配置
查看>>
Nginx架构
查看>>
为什么结构体中的数组不能用const int变量指定大小?
查看>>
模板特化疑问
查看>>
ruby多线程理解
查看>>