本文主要是介绍2014-一生之敌 ZCMU,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于2014-一生之敌 ZCMU的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!