poj2748(找规律)

来源:互联网 发布:js调用身份证读取器 编辑:程序博客网 时间:2024/05/29 15:50

http://poj.org/problem?id=2748

Logs Stacking
Time Limit: 2000MSMemory Limit: 65536KTotal Submissions: 3649Accepted: 1213

Description

Daxinganlingproduces a lot of timber. Before loading onto trains, thetimberjacks will place the logs to some place in the open airfirst. Looking from the sideway, the figure of a logs stack is asfollows:

poj2748(找规律)

We have known that the number of logs in each layer is fewer thanthe lower layer for at least one log, and that in each layer thelogs are connected in a line. In the figure above, there are 12logs in the bottom layer of the stack. Now, given the number oflogs in the bottom layer, the timberjacks want to know how manypossible figures there may be.

Input

The first line ofinput 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 thebottom layer.

Output

For each test casein the input, you should output the corresponding number ofpossible figures. Because the number may be very large, just outputthe number mod 10^5.

Sample Input

41235

Sample Output

12534

Source

POJ Monthly--2006.01.22,anonymous
题意:已知最后一层的木头数,求在它上面有多少中堆木头的方法,注意and that in each layer the logs areconnected 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()
{
    intt,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]);
    }
    return0;
}
原创粉丝点击