2014: 一生之敌
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 75
[ Submit][ Status][ Web Board]
Description
Input
第一行输入一个整数T,表示数据组数。
每组数据输入一个整数n。
1 <= T <= 100000
0 <= n <= 10^19
保证结果存在
Output
输出一个整数。
Sample Input
3 2 6 100
Sample Output
66114
暴力打表找规律+二分
每个答案都跟6有关系 大概是1*6、6*6、19*6 、44*6......
然后它的系数1 、6、19、44 分别是1+5 +13+25
1、5、13、25 又分别是1+4+8+16
明显 1、4、8、16 跟2*i有关系
即可打表返回得到答案,在再二分找答案即可
没有什么数学题是不可以找规律的,如果不可以那么就找两次
RunID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
340225 | 1518630367 | Accepted |
36120
|
160
| C++/Edit | 785 B | 2018-01-10 10:35:13 |
#include <stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#define inf 99999999
using namespace std;
unsigned long long a[1500000];
unsigned long long b[1500000];
unsigned long long c[1500000];
int main(int argc, char *argv[])
{
a[1]=5;
a[0]=1;
int i;
for(i=2;i<1500000;i++)
{
a[i]=a[i-1]+i*4;
}
b[1]=1;
for(i=2;i<=1500000;i++)
{
b[i]=(b[i-1]+a[i-1]);
}
for(i=1;i<1500000;i++)
{
c[i]=b[i]*6;
}
int t;
scanf("%d",&t);
while(t--)
{
unsigned long long n;
scanf("%llu",&n);
if(n==0)
{
printf("0\n");
continue;
}
int p=lower_bound(c+1,c+1500000,n)-c;
printf("%llu\n",c[p]);
}
return 0;
}