GZS的三角形
发布时间: 2015年9月6日 15:18 最后更新: 2016年6月26日 12:10 时间限制: 1000ms 内存限制: 256M
机智无比的G神今天完成了一天的任务,实在是无聊的紧,拿起一支笔在纸上画起了三角形,边长为1, 2, 3,.........
即使是无聊到这种程度,G神发达的大脑也在不停的思考,从顶部的点到沿着所画出的边到达底边的方案有多少种呢。
结果可能比较大, 结果对1000003取余。
例如,边长为2的情况如下所示:
第一行有一个整数 T (1 <= T <= 1000) ,是三角形的个数。
接下来T行,每行一个整数 N (1 <= N <= 10^18),代表三角形边长。
输出T行,每行代表方案数,结果对1000003取余。
复制
3 1 2 3
2 8 48
找规律,找到的规律和阶乘有关,要On求,肯定会t,就没敢写,后来想想对1000003区余,因为是阶乘,当比它大的时候就为0了
#include<stdio.h>
#define x 1000003
long long int ans[x+2],anns[x+2];
int main()
{
long long int t,n;
ans[0]=1;
for(int i=1;i<=x;i++)
{
ans[i]=ans[i-1]*2*i;
ans[i]%=x;
}
scanf("%lld",&t);
for(int i=0;i<t;i++)
{
scanf("%lld",&n);
if(n>=x)
{
anns[i]=0;
continue;
}
anns[i]=ans[n];
}
for(int i=0;i<t;i++)
printf("%d\n",anns[i]%x);
return 0;
}