标签:
10
1
2
3
4
5
6
7
8
22
10
1
2
3
4
5
6
1
2
4
4
题目大意:
通式为
让你求 这个数列构成
解题思路:
首先将这个式子进行变形,变为
然后我们又知道三角形数可以构成任何数,那么假设题目中给定的
的数组成的就有:
数就行了。
/**
2016 - 08 - 23 下午
Author: ITAK
Motto:
今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。
**/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const LL INF = 1e9+5;
const LL MAXN = 1e6+5;
const LL MOD = 1e9+7;
const double eps = 1e-7;
const double PI = acos(-1);
using namespace std;
LL Scan_LL()///输入外挂
{
LL res=0,ch,flag=0;
if((ch=getchar())==‘-‘)
flag=1;
else if(ch>=‘0‘&&ch<=‘9‘)
res=ch-‘0‘;
while((ch=getchar())>=‘0‘&&ch<=‘9‘)
res=res*10+ch-‘0‘;
return flag?-res:res;
}
void Out(LL a)///输出外挂
{
if(a>9)
Out(a/10);
putchar(a%10+‘0‘);
}
LL cnt;
LL a[MAXN], sum[MAXN];
void Init()
{
a[0] = 1LL, sum[0] = 1LL;
a[1] = 1LL, sum[1] = 1LL;
for(LL i=2; i<MAXN; i++)
{
a[i] = 3LL*(LL)i*(LL)(i-1)+1LL;
if(a[i] > INF)
{
cnt = i;
break;
}
}
}
bool Judge(LL m)
{
LL l = 0, r = cnt;
while(l <= r)
{
if(a[l] + a[r] == m)
return 1;
else if(a[l] + a[r] < m)
l++;
else
r--;
}
return 0;
}
int main()
{
Init();
LL T, m;
T = Scan_LL();
while(T--)
{
m = Scan_LL();
LL tmp1 = lower_bound(a+1, a+cnt+1, m) - a;
if(a[tmp1] == m)
{
puts("1");
continue;
}
if(Judge(m))
{
puts("2");
continue;
}
for(LL i=3; ; i++)
{
if( (m-i) % 6 == 0)
{
printf("%I64d\n",i);
break;
}
}
}
return 0;
}
HDU 5312 Sequence(三角形数应用)——BestCoder 1st Anniversary ($)
标签:
原文地址:http://blog.csdn.net/qingshui23/article/details/52290878