Description

Input
第一行输入一个整数T,表示数据组数。
每组数据输入一个整数n。
1 <= T <= 100000
0 <= n <= 10^19
保证结果存在
Output
输出一个整数。
Sample Input
3
2
6
100
Sample Output
6
6
114
解析
因为a,b都是整数,而且b^2=2*a*(a+1)^2<=1e19,所以a<2*1e6,同时b=sqrt(2*a)(a+1),可以用i枚举a,2*a=4*i*i ->b=2*i*(2*i*i+1)
因为数据范围极大,所以要用%llu
代码
#include<bits/stdc++.h>
#define MAX 1400005
using namespace std;
unsigned long long ans[MAX],i;
void solve()
{
for(i=1;i<MAX;i++)
{
ans[i]=2*i*(2*i*i+1);
}
}
int main()
{
int T;
unsigned long long n;
scanf("%d",&T);
solve();
while(T--)
{
scanf("%llu",&n);
int temp=lower_bound(ans,ans+MAX,n)-ans;
printf("%llu\n",ans[temp]);
}
return 0;
}
本文介绍了一道算法竞赛题目,要求在极大范围内快速找出满足特定条件的数列。通过枚举和优化,使用C++实现了一个高效算法,能够处理大量数据组并在规定时间内给出准确答案。
954

被折叠的 条评论
为什么被折叠?



