zcmu 2014: 一生之敌(思维)
【题目】
2014: 一生之敌
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 725 Solved: 117
[Submit][Status][Web Board]
Description
Input
第一行输入一个整数T,表示数据组数。
每组数据输入一个整数n。
1 <= T <= 100000
0 <= n <= 10^19
保证结果存在
Output
输出一个整数。
Sample Input
3
2
6
100
Sample Output
6
6
114
【题解】
因为b^2=2*a*(a+1)^2<=1e19,所以a<=3e6
b*b=2*a*(a+1)*(a+1) --> b=sqrt(2*a)*(a+1) 枚举i=sqrt(2*a),a=i*i/2 ,则b=i*(a+1)
数据比较大需要用unsigned long long
【代码】
#include
using namespace std;
typedef unsigned long long ull;
vector vec;
main()
{ ull i,a=0,n; for(ull i=0;a*(i+1)<=1e19;i+=2) { a=i*i/2; vec.push_back(i*(a+1)); } int t; scanf("%d",&t); while(t--) { scanf("%llu",&n); int ans=lower_bound(vec.begin(),vec.end(),n)-vec.begin(); printf("%llu\n",vec[ans]); }
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
