博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gym 100283F Bakkar In The Army
阅读量:5948 次
发布时间:2019-06-19

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

数学公式: n^2的前n项和n(n+1)(2*n+1)/6,用二分进行查找;

算出层数后继续二分查找位于这一层的哪一位,也可以推出相应公式

#include 
#include
#include
#include
using namespace std;typedef long long ll;ll f(ll n) //a(n)=n^2的前n项和公式{ return n*(n+1)*(2*n+1)/6;}ll f2(ll i,ll n) //这个公式要推一下{ if(i<=n) return i*(i+1)/2; return n*n-(2*n-i)*(2*n-i-1)/2;}int main(){ freopen("army.in","r",stdin); int t; scanf("%d",&t); int ti=1; while(t--) { ll n; scanf("%I64d",&n); int lef=1,rig=1500000,floor; while(1) //二分算哪一层 { floor=(lef+rig)/2; if(n>f(floor-1) && n<=f(floor)) break; if(n<=f(floor)) rig=floor-1; else lef=floor+1; } ll tmp=f(floor-1); lef=1; rig=2*floor-1; int index; while(1) //二分算这一层的哪一个 { index=(lef+rig)/2; if(n>tmp+f2(index-1,floor) && n<=tmp+f2(index,floor)) break; if(n<=tmp+f2(index,floor)) rig=index-1; else lef=index+1; } printf("Case %d: %I64d\n",ti++,(ll)(floor-1)*(floor-1)+index); } return 0;}

 

转载于:https://www.cnblogs.com/pach/p/6725048.html

你可能感兴趣的文章
关于jsb中js与c++的相互调用
查看>>
UVA 122 Trees on the level 二叉树 广搜
查看>>
POJ-2251 Dungeon Master
查看>>
tortoisesvn的安装
查看>>
URAL 1353 Milliard Vasya's Function DP
查看>>
速读《构建之法:现代软件工程》提问
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
sed处理文本
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>