The Nth Item

\[Time Limit: 1000 ms \quad Memory Limit: 262144 kB
\]

题意

给出递推式,求解每次 \(F[n]\) 的值,输出所有 \(F[n]\) 的 \(xor\) 值。

思路

对于线性递推数列,可以用特征方程求出他的通项公式,比如这题

\[F[n] = 3F[n-1]+2F[n-2] \\
x^2 = 3x+2 \\
x = \frac{3\pm \sqrt{17}}{2}
\]

令 \(F[n] = C_1x_1^n + C_2x_2^n\)

将 \(F[0]\) 和 \(F[1]\) 带入

\[\begin{aligned}
&\begin{cases}
C_1 + C_2 = 0 \\
C_1\frac{3+ \sqrt{17}}{2} + C_2\frac{3- \sqrt{17}}{2} = 1
\end{cases} \\
&\begin{cases}
C_1 = \frac{1}{\sqrt{17}}\\
C_2 = -\frac{1}{\sqrt{17}}
\end{cases}
\end{aligned}
\]

即 \(F[n] = \frac{1}{\sqrt{17}} \left[\left(\frac{3+\sqrt{17}}{2}\right)^n - \left(\frac{3-\sqrt{17}}{2}\right)^n \right]\)

\(\sqrt{17}\) 可以通过二次剩余来得到其中一个可能的解,\(524399943\) 就是一个解。

令 \(p = \frac{3+\sqrt{17}}{2},q=\frac{3-\sqrt{17}}{2}\),现在的问题就是解出 \(p^n\) 和 \(q^n\)。

首先因为 \(n\) 高达 \(1e18\),可以利用欧拉降幂,把 \(n\) 降到 \(2mod-1\) 级别内,也即是 \(2e9\) 附近。

可以利用 \(n = x*50000+y\),\(q^n = q^{x*50000} * q^y\),将 \(q\) 在 \(5e4\) 以内的幂打表出来,在打出 \(q\) 的幂为 \(k*5e4\) 的表,然后就可以做到 \(O(1)\) 查询。

对于 \(q\) 也是相同的做法。

/***************************************************************
> File Name : a.cpp
> Author : Jiaaaaaaaqi
> Created Time : Wed 11 Sep 2019 10:01:20 PM CST
***************************************************************/ #include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define lowbit(x) x & (-x)
#define mes(a, b) memset(a, b, sizeof a)
#define fi first
#define se second
#define pb push_back
#define pii pair<int, int> typedef unsigned long long int ull;
typedef long long int ll;
const int maxn = 1e5 + 10;
const int maxm = 1e5 + 10;
const ll mod = 998244353;
const ll INF = 1e18 + 100;
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-8;
using namespace std; ll n, m;
int cas, tol, T; ll fpow(ll a, ll b) {
ll ans = 1;
while(b) {
if(b&1) ans = ans*a%mod;
a = a*a%mod;
b >>= 1;
}
return ans;
}
ll sqrt17 = 524399943, phiC = mod-1;
ll p, q, inv17; ll ppow1[maxn], ppow2[maxn];
ll qpow1[maxn], qpow2[maxn]; void handle() {
inv17 = fpow(sqrt17, mod-2);
p = 1ll*(3ll+sqrt17)*fpow(2, mod-2)%mod, q = 1ll*(3ll-sqrt17+mod)*fpow(2, mod-2)%mod;
ppow1[0] = qpow1[0] = 1;
for(int i=1; i<=50000; i++) {
ppow1[i] = ppow1[i-1]*p%mod;
qpow1[i] = qpow1[i-1]*q%mod;
}
ppow2[0] = qpow2[0] = 1;
ppow2[1] = ppow1[50000];
qpow2[1] = qpow1[50000];
for(int i=2; i<=50000; i++) {
ppow2[i] = ppow2[i-1]*ppow1[50000]%mod;
qpow2[i] = qpow2[i-1]*qpow1[50000]%mod;
}
} ll getp(ll n) {
return ppow2[n/50000]*ppow1[n%50000]%mod;
} ll getq(ll n) {
return qpow2[n/50000]*qpow1[n%50000]%mod;
} ll solve(ll n) {
if(n >= phiC) n = n%phiC+phiC;
return inv17*(getp(n)-getq(n)+mod)%mod;
} int main() {
// freopen("in", "r", stdin);
handle();
scanf("%lld%lld", &n, &m);
ll ans = 0;
for(int i=1; i<=n; i++) {
ll tmp = solve(m);
m ^= tmp*tmp;
ans ^= tmp;
}
printf("%lld\n", ans);
return 0;
}

The Nth Item 南昌网络赛(递推数列,分段打表)的更多相关文章

  1. 南昌网络赛 H The Nth Item

    南昌网络赛The Nth Item 暴力快速幂+unordered_map记忆化 注意:记忆化不能写到快速幂求解函数里,不断调用函数会造成很大的时间浪费 #include<bits/stdc++ ...

  2. 2019 ICPC 南昌网络赛

    2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 ...

  3. dp--2019南昌网络赛B-Match Stick Game

    dp--2019南昌网络赛B-Match Stick Game Xiao Ming recently indulges in match stick game and he thinks he is ...

  4. 线段树+单调栈+前缀和--2019icpc南昌网络赛I

    线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...

  5. 2019南昌网络赛I:Yukino With Subinterval(CDQ) (树状数组套主席树)

    题意:询问区间有多少个连续的段,而且这段的颜色在[L,R]才算贡献,每段贡献是1. 有单点修改和区间查询. 思路:46min交了第一发树套树,T了. 稍加优化多交几次就过了. 不难想到,除了L这个点, ...

  6. ACM-ICPC 2019南昌网络赛F题 Megumi With String

    ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...

  7. ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval

    ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询 ...

  8. 南昌网络赛C.Angry FFF Party

    南昌网络赛C.Angry FFF Party Describe In ACM labs, there are only few members who have girlfriends. And th ...

  9. 分治维护dp——19南昌网络赛C/cf750E

    南昌网络赛,是cf的原题 第一次做到这种题,所以认真想了下,每次给一个询问[L,R],要求出这个区间里有2017子序列,但是不能有2016子序列需要删掉的最少元素个数 首先如果我们之询问一小段区间[L ...

随机推荐

  1. .NET Core创建Worker Services

    .NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序.如果安装的vs2019是中文版本,W ...

  2. SpringBoot第八篇:整合MyBatis-Generator

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10894278.html 版权声明:本文为博主原创文章,转载请附上博文链接! 注意:本章有大量代码 ...

  3. Java并发之原子性,可见性,有序性

    原子性 ​原子性指的是一个或者多个操作在 CPU 执行的过程中不被中断的特性 在多线程情况下,线程会被操作系统调度进行任务切换,占有CPU时间片段的就执行,否则就阻塞 java中对基础类型的变量赋值是 ...

  4. HttpRuntime.Cache 与 HttpContext.Current.Cache

    1.HttpRuntime.Cache是应用程序级别的, 2.而HttpContext.Current.Cache是针对当前WEB上下文定义的. 3.这二个都是调用的同一个对象,不同的是:HttpRu ...

  5. python程序设计基础(程序设计基础方法)

    python初学者程序练习题 注:练习题涉及到range()函数的使用方法和python绘制,后面会单独发篇解释说明. 1.字符串拼接.接收用户输入的两个字符串,将它们组合后输出 str1=input ...

  6. redis 实战操作RDB和AOF快照持久化

    前言:redis是我们常用的缓存方式,今天就来介绍下两种持久化的方式吧,先科普概念,再实战操作 一.RDB Redis将某一时刻的快照(备份的数据库数据)保存成一种称为RDB格式的文件中,这种格式是经 ...

  7. Spring Cloud Gateway转发Spring WebSocket

    Spring Cloud Gateway转发Spring WebSocket 源码:https://github.com/naah69/SpringCloud-Gateway-WebSocket-De ...

  8. 关于VS C++中项目属性的一些名称的含义

    这个属性页(Alt + F7)界面下的$开头的内容的含义 $(Platform), X64或X86类似的. $(SolutionDir),.sln的位置 $(Configuration), Debug ...

  9. JavaScript 总结[目录]

    ECMAScript 基础 一.JavaScript 基础 1.1 JavaScript 简介 1.2 JavaScript 书写位置 二.JavaScript 数据类型 2.1 JavaScript ...

  10. WampServer出现You don’t have permission to access/on this server提示

    WampServer出现You don’t have permission to access/on this server提示 本地搭建WampServer,输入http://127.0.0.1访问 ...