A45676.时空の穿越
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
在一个平行时空里,TS 出了名叫“亿大亿小”的题,题目简化过来是这样的:给定一个正整数 N,求一个数列 F 中第 N 项的值。但是,他在造数据时忘记写:
#define int __int18446744073709551616
导致这道题的输出数值特别小。最终这个问题在公开赛中被榜一大佬 SS 发现,TS 被网友骂了 114514 年。现在这份题目文件不小心到了这个时空的 ST 电脑内,于是他就根据它出了这道题。
定义序列 F,它满足:
Fi={1,Fi−1+2×Fi−2+3×Fi−3+5×Fi−4+8×Fi−5,1≤(i≤5)(i≥6)
给定一个正整数 N,定义 Ans 如下:
Ans={FNmod232,(FNmod232)−232,FNmod232<231FNmod232≥231
请你求出 Ans 的值。
输入格式
输入共 T+1 行:
第一行 1 个正整数 T,表示测试数据数量;
对于每个测试数据,有 1 个正整数 N,占一行。
输出格式
对于每个测试数据,输出 1 个正整数,表示该测试数据对应的 Ans 的值,以换行符隔开。
输入输出样例
输入#1
3 1 6 26
输出#1
1 19 -887981007
说明/提示
【数据范围】
对于所有的数据,保证:
1≤T≤103,1≤N≤264−1
测试点 | N≤ |
---|---|
1,2,3 | 103 |
4~10 | 264−1 |
本题测试点等分。
【样例解释】
样例组 #1:三组测试的解释如下:
∵1≤5∴F1=1
∵6≥6∴F6=F5+2×F4+3×F3+5×F2+8×F1=19
∵F26=3406986289 F26mod232=3406986289≥231∴Ans=3406986289−232=−887981007
【特殊说明】
- 让
int
直接溢出在原则上是不被允许的,因为这是未定义行为,即在不同编译器中产生的结果可能不同,有些编译器甚至返回RE
。所以对于这道题,你应该使用long long
对 232 取模或者使用unsigned int
自然溢出来计算。