https://nanti.jisuanke.com/t/41355

思路

  • 从fib循环节入手,\(O(1e7log(1e9))\),tle
  • 因为只需要输出所有询问亦或后的结果,所以考虑答案的循环节,打表发现大于10w后的答案的循环节为2,\(O(1e5log(1e18))\)
  • 不考虑循环节,第一眼看过去这道题需要O(1)询问,其实仔细一想可以多一些常数,考虑分段打表,1e18分成三段打表,每一段的表长都是1e6,然后每次询问最多\(O(2*矩阵相乘)\)
#include<bits/stdc++.h>
#define ll long long
#define mk make_pair
#define ft first
#define se second
#define pii pair<int,int>
#define db double
#define ls o<<1
#define rs o<<1|1
#define lowbit(x) (x&-x)
using namespace std;
const int M=2e6+5,T=1e6;
const ll P=998244353;
int x[2][2]={{1,0},{0,0}};
int y[2][2]={{3,1},{2,0}};
int z[2][2]={{1,0},{0,1}};
ll q,n;
struct mat{
ll d[2][2];
void init(int c[2][2]){
for(int i=0;i<2;i++)for(int j=0;j<2;j++)d[i][j]=c[i][j];
}
mat operator *(const mat& rhp)const{
mat tmp;
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
tmp.d[i][j]=0;
for(int k=0;k<2;k++)
tmp.d[i][j]=(tmp.d[i][j]+d[i][k]*rhp.d[k][j]%P)%P;
}
}
return tmp;
}
}A[3][M]; void init(){
A[0][0].init(z);
A[0][1].init(y);
for(int i=2;i<=T;i++){
A[0][i]=A[0][i-1]*A[0][1];
}
A[1][0].init(z);
A[1][1]=A[0][T];
for(int i=2;i<=T;i++){
A[1][i]=A[1][i-1]*A[1][1];
}
A[2][0].init(z);
A[2][1]=A[1][T];
for(int i=2;i<=2*T;i++){
A[2][i]=A[2][i-1]*A[2][1];
}
}
ll gao(ll n){
if(n==0)
return 0;
if(n==1)
return 1;
mat B;
B.init(z);
for(int i=0;i<3&&n;i++){
int k=n%T;
if(i==2)k=n; //没有前导0
B=B*A[i][k];
n/=T;
}
return B.d[0][1];
}
int main(){
cin>>q>>n;
init();
ll res=0,f;
while(q--){
f=gao(n);
n^=f*f;
res^=f;
}
cout<<res<<endl;
return 0;
}

2019南昌网络赛H The Nth Item(打表找询问循环节 or 分段打表)的更多相关文章

  1. 2019南昌网络赛H The Nth Item(二阶线性数列递推 + 广义斐波那契循环节 + 分段打表)题解

    题意: 传送门 已知\(F(n)=3F(n-1)+2F(n-2) \mod 998244353,F(0)=0,F(1)=1\),给出初始的\(n_1\)和询问次数\(q\),设每一次的答案\(a_i= ...

  2. 南昌网络赛 H The Nth Item

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

  3. 2019 南昌ICPC网络赛H The Nth Item

    The Nth Iteam 题意:F(0)=1,F(1)=1,F(n)=3*F(n-1)+2*F(n-2) (n>=2) ,F(n) mod 998244353.给出Q跟N1,Ni=Ni-1^( ...

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

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

  5. 2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂

    2019-ACM-ICPC-南昌区网络赛-H. The Nth Item-特征根法求通项公式+二次剩余+欧拉降幂 [Problem Description] ​ 已知\(f(n)=3\cdot f(n ...

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

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

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

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

  8. 2019南昌网络赛 hello 2019

    这道题和一道2017,2016的类似. A string t is called nice if a string “2017” occurs in t as a subsequence but a ...

  9. 2019南昌网络赛G. tsy's number

    题意:\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\frac{\phi(i)*\phi(j^2)*\phi(k^3)}{\phi(i)*\phi(j)*\phi(k)} ...

随机推荐

  1. JavaScript for 、for...of 、for...in 等 iteration 效率测试

    由于不同浏览器,不同版本性能不一,且控制台本质是是套用了一大堆eval,沙盒化程度高,所以需使用node环境测试来提高准确性 // 准备待测数组 const NUM = 1e7; let arr = ...

  2. MySQL 学习笔记 (一)

    1.InnoDB and Online DDL ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE; ...

  3. windows重装系统后grub引导菜单修复方法(亲自实验过)

    问题: 电脑安装的是windows7+ubuntu 15.10双系统.windows重装后,grub引导界面消失. 解决方法有两大步: 1.进入ubuntu; 2.在ubuntu中修复grub. 一. ...

  4. 用iText5-2-其他类型PDF

    //设置文件属性的PDF package com.wf.zhang.test; import java.io.FileOutputStream; import com.itextpdf.text.Ba ...

  5. 在浏览器地址栏输入www.baidu.com到打开百度首页这期间到底发生了什么?

    刚才无意间看到这么一个面试题,觉得有点意思,我想从五层网络模型的角度说说我的看法. 1.首先通过DNS域名系统向域名服务器发送域名解析请求来得到百度的IP地址39.156.69.79:2.系统通过AR ...

  6. dotnet core 调用electron来开发UI的探索

    先上仓库地址 https://github.com/lightszero/webwindow.netcore dotnet core 很喜欢,问题dotnet core 不包含GUI,经过一些尝试,觉 ...

  7. java之简单类对象实例化过程

    假设现在有这么一个类: public class Person{ public Person(){} String name = "tom"; int age = 1; int s ...

  8. vsftpd服务的基本配置

    本文环境:CentOS 7 简介 FTP(文件传输协议,File Transfer Protocol)是最古老的协议之一,诞生于1971年,距今已经半个世纪了,它的目的是在不同计算机之间传输文件(实现 ...

  9. 搞定vscode编写java(手把手篇)

    1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...

  10. 【c&c++】变量初始化

    /* 全局变量会默认初始化为0 空 和 false,局部变量要手动初始化,或者直接scanf输入值进去.如果不初始化,n可能是0也有可能是其他数,大多数情况下会是0,但不初始化是不安全的,所以Dev直 ...