首页 > 其他 > 详细

HDU 4342

时间:2014-12-06 21:31:44      阅读:252      评论:0      收藏:0      [点我收藏+]

先确定M的大致范围后即可求。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define LL __int64
#define N 60000

LL square[N];
LL spre[N];

void init(){
	spre[0]=0; spre[0]=0;
	for(LL i=1;i<N;i++){
		square[i]=i*i;
		spre[i]=spre[i-1]+i*(2*i+1);
	}
}

int main(){
	init();
	int T,n;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		LL p=(LL)sqrt(n*1.0);
		if(square[p+1]-p-1<n)
		p++;
		LL g=n-(square[p]-p)+square[p];
		LL su=spre[p-1]+p*(g-square[p]+1);
		printf("%I64d %I64d\n",g,su);
	}
}

  

HDU 4342

原文:http://www.cnblogs.com/jie-dcai/p/4148786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!