http://poj.org/problem?id=2748
Logs Stacking
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 3649 | Accepted: 1213 |
Description
Daxinganling produces a lot of timber. Before loading onto trains, the timberjacks will place the logs to some place in the open air first. Looking from the sideway, the figure of a logs stack is as follows:
We have known that the number of logs in each layer is fewer than the lower layer for at least one log, and that in each layer the logs are connected in a line. In the figure above, there are 12 logs in the bottom layer of the stack. Now, given the number of logs in the bottom layer, the timberjacks want to know how many possible figures there may be.
We have known that the number of logs in each layer is fewer than the lower layer for at least one log, and that in each layer the logs are connected in a line. In the figure above, there are 12 logs in the bottom layer of the stack. Now, given the number of logs in the bottom layer, the timberjacks want to know how many possible figures there may be.
Input
The first line of input contains the number of test cases T (1 <= T <= 1000000). Then T lines follow. Every line only contains a number n (1 <= n <= 2000000000) representing the number of logs in the bottom layer.
Output
For each test case in the input, you should output the corresponding number of possible figures. Because the number may be very large, just output the number mod 10^5.
Sample Input
4 1 2 3 5
Sample Output
1 2 5 34
Source
POJ Monthly--2006.01.22,anonymous
题意:已知最后一层的木头数,求在它上面有多少中堆木头的方法,注意and that in each layer the logs are connected in a line。木头是紧挨着的。上面一层的木头数至少比下面一层的木头数少1.。。
先找出规律方程,在打表找出循环节点发现是75000(找死掉啊)。
还有就是a[0]=1因为到时候是75000的倍数的时候应该是1所以a[0]初始值是1...wa了好多次。。
最开始的时候思路是错的居然还tle..看来数据弱爆了。。。。
#include
#include
#include
using namespace std;
#define maxn 1000010
__int64 a[maxn]={0,1,2};
int main()
{
int t,i;
//freopen("woaini.txt","r",stdin);
//freopen("youaiwo.txt","w",stdout);
scanf("%d",&t);
for(i=3;i<=75000;i++)
{
a[i]=(3*a[i-1]-a[i-2]+100000)0000;
}
for(i=1;i<=t;i++)
{
__int64 n;
scanf("%I64d",&n);
printf("%I64d\n",a[nu000]);
}
return 0;
}
#include
#include
using namespace std;
#define maxn 1000010
__int64 a[maxn]={0,1,2};
int main()
{
}