H. The Nth Item(The 2019 Asia Nanchang First Round Online Programming Contest)
题意:https://nanti.jisuanke.com/t/41355
给出N1,计算公式:A=F(N)Ni=Ni-1 ^ (A*A),F为类斐波那契需要矩阵快速幂的递推式。
求第k个N。
思路:
发现从大约1e5个数开始N交替出现,到一定位置%2即可。(or正解:https://blog.csdn.net/qq_41848675/article/details/100667808 or
https://blog.csdn.net/jk_chen_acmer/article/details/100635672 or map记忆化)
#include<bits/stdc++.h>
using namespace std;
//const int maxn=1000005;
using namespace std;
typedef long long ll;
const int N = ;//矩阵大小
//ll k;
const long long mod=(long long );
struct Mat
{
ll mat[N][N];
Mat operator*(const Mat a)const
{
Mat b; memset(b.mat, , sizeof(b.mat));
for (int i = ; i < N; i++)
for (int j = ; j < N; j++)
for (int k = ; k < N; k++)
b.mat[i][j] = (b.mat[i][j] + (mat[i][k]) *(a.mat[k][j])) % mod;
return b;
}
}; ll phi(ll x)//求欧拉
{
ll res=x;
for(ll i=;i*i<=x;i++)
{
if(x%i==)
{
res=res/i*(i-);
while(x%i==) x/=i;
}
}
if(x>) res=res/x*(x-);
return res;
}
Mat Pow(Mat m, ll k)
{
//if(k==1) return 1;
Mat ans;
memset(ans.mat, , sizeof(ans.mat));
for (int i = ; i < N; i++)
ans.mat[i][i] = ;
while (k)
{
if (k & ) ans = ans*m;
k >>= ;
m = m*m;
}
return ans;
} ll que[*];
int head=,tail= ;
int main() { ll phi_mod=phi(mod);
Mat m;
int q;
ll n,ans;
scanf("%d%lld",&q,&n);
//printf("\n%d %lld\n",q,n);
Mat f;
m.mat[][]=;m.mat[][]=;
m.mat[][]=;m.mat[][]=;
f.mat[][]=;//x1
f.mat[][]=;//x0
f = Pow(m, (n-)%phi_mod)*f;
ans=f.mat[][];
//printf("%lld %lld\n",n,ans);
que[head]=ans; //printf("%lld",f.mat[0][0]);
/*
* 10000000 1000000000000000000
* */
for (register int i = ; i <= q; i++) {
//init(m);
//memset(f.mat, 0, sizeof(f.mat));
n = n ^ (f.mat[][] * f.mat[][]); if (n == ) {
f.mat[][] = ;
} else if (n == ) {
f.mat[][] = ;
} else {
m.mat[][] = ;
m.mat[][] = ;
m.mat[][] = ;
m.mat[][] = ;
f.mat[][] = ;//x1
f.mat[][] = ;//x0 f = Pow(m, (n - ) % phi_mod) * f; }
ans = ans ^ f.mat[][];
//printf("%lld %lld\n", n, ans); que[tail++]=ans;
if(tail-head>)
{
head++;
if(que[head]==que[head+]&&que[head+]==que[head++])
{
int tmp=q-i;
if(tmp%)
{
ans=que[head];
}
else
{
ans=que[head+];
}
break;
}
} }
printf("%lld\n",ans);
return ;
} /*
* 858251072
*
* 245284867829898842 447003402
485245887812443738 1008229130
*
*
*
*
* */
H. The Nth Item(The 2019 Asia Nanchang First Round Online Programming Contest)的更多相关文章
- E.Magic Master(The 2019 Asia Nanchang First Round Online Programming Contest)
直接模拟orhttps://blog.csdn.net/liufengwei1/article/details/100643831
- The 2019 Asia Nanchang First Round Online Programming Contest
传送门 A. Enju With math problem 题意: 给出\(a_1,\cdots,a_{100}\),满足\(a_i\leq 1.5*10^8\). 现在问是否存在一个\(pos\), ...
- The 2019 Asia Nanchang First Round Online Programming Contest(B,E)
B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...
- The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item
The Nth Item 思路: 先用特征根法求出通向公式,然后通向公式中出现了\(\sqrt{17}\),这个可以用二次剩余求出来,然后可以O(\(log(n)\))求出. 但是还不够,我们先对\( ...
- The 2019 Asia Nanchang First Round Online Programming Contest C. Hello 2019(动态dp)
题意:要找到一个字符串里面存在子序列9102 而不存在8102 输出最小修改次数 思路:对于单次询问 我们可以直接区间dpOn求出最小修改次数 但是对于多次询问 我在大部分题解看到的解释一般是用线段树 ...
- The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)
题:https://nanti.jisuanke.com/t/41350 分析:先将字符串转置过来 状态转移,因为只有5个状态,所以 i 状态到 j 状态的最小代价就枚举[i][k]->[k][ ...
- The 2019 Asia Nanchang First Round Online Programming Contest E. Magic Master
题目链接:https://nanti.jisuanke.com/t/41352 题目意思还是好理解的,看过的人不多,感觉是被通过量吓到了.其实就是个水题,反向模拟就好了, 用队列模拟,反向模拟,它要放 ...
- The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero
题目链接:https://nanti.jisuanke.com/t/41349 题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较. 灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点 ...
- The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)
This is an era of team success, but also an era of heroes. Throughout the ages, there have been nume ...
随机推荐
- ACM之路(13)—— 树型dp
最近刷了一套(5题)的树型dp题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=116767#overview,算是入了个门,做下总结. ...
- js eval 动态内容生成
js比较简单易上手,适合用于动态内容生成.或规则判断,比如给出json格式的数据,动态执行js脚本得到预期的结果等. 接口文档:包括jsConfig.jsEval两个接口 jsConfig使用get的 ...
- LeetCode687----最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入: 5 / \ 4 5 / ...
- 让一个小的div在大的div中居中显示
原文 实现原理是设置margin自动适应,然后设置定位的上下左右都为0. 就如四边均衡受力从而实现盒子的居中: 代码: .parent { width:800px; height:500px; bor ...
- 微擎转移服务器后,出现 require()错误,解决方案
微擎中切换服务器后出现该问题,有可能是导致配置的问题
- linux(redhat)安装jdk1.8
第一步:下载Linux环境下的jdk1.8文件 我的Linux是32位的,因此我下载jdk-8u144-linux-i586.tar.gz文件. 下载链接地址:http://www.oracle.co ...
- Elasticsearch的安装入门
大纲: 一.简介 二.Logstash 三.Redis 四.Elasticsearch 五.Kinaba 一.简介 1.核心组成 ELK由Elasticsearch.Logstash和Kibana三部 ...
- DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法
故障现象描述: 执行 SQL 语句时,出现类似如下错误消息. 指令 SQL:insert into t_stat_file_temp SQLSTATE:57011,供应商错误代码:-964 DB2 S ...
- swagger-ui 系统配置过程(基于spring+springmvc+swagger+springfox配置 web-api 管理系统)
web工程部分框架信息:spring springmvc swagger springfox maven 参考文档:https://www.cnblogs.com/exmyth/p/7183753.h ...
- idea使用generatorconfig生成
在maven工程中的resource中创建generatorConfigxml配置generatorConfigxml的配置pomxml生成对象的两种方式方式一使用idea的maven插件直接快速生成 ...