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 ...
随机推荐
- php unicode转字符串
<?php /** * @param string $str 需转换字符,这里为单个字符 * @return string */ function get_unicode($str) { $bi ...
- 记一次maxwell报错:Couldn't find table 'violation_info' in database och_evcard_data
往常maxwell是正常跑的,但是突然今天报错: Couldn't find table 'violation_info' in database och_evcard_data 而且这个库和这个表, ...
- [CSP-S2019]:赛后总结
笔者有幸参加了$CSP-S\ 2019$,$AFO$之前,写下自己最后一篇赛后总结. $Day\ 0$ 早上起来把自己调了一晚上被卡空间的题卡过了,很开心(内存限制$256MB$,然而我的内存申请是$ ...
- MyBatis动态Sql 的使用
Mapper.xml提示: 1:mapper包中新建一个文件:mybatis-3-mapper.dtd 2:在web app libraries/mybatis.jar/org.apache.ibat ...
- PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别
PL/SQL中直接写SQL语句和用EXECUTE IMMEDIATE方法的区别 在PL/SQL中在执行SQL语句时可以直接写SQL或者可以把一个SQL语句拼成一个字符串,如下: select * fr ...
- 爬虫实践——数据存储到Excel中
在进行爬虫实践时,我已经爬取到了我需要的信息,那么最后一个问题就是如何把我所爬到的数据存储到Excel中去,这是我没有学习过的知识. 如何解决这个问题,我选择先百度查找如何解决这个问题. 百度查到的方 ...
- Go项目的测试代码3(测试替身Test Double)
上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...
- ubuntu16.04下如何安装dtc工具?
答: sudo apt-get install device-tree-compiler -y
- Vue项目打包后背景图片路径错误
vue项目打包之后背景图片出错的解决方案如下: 1,找到 config->index.js里面,如下修改 默认配置: env: require('./prod.env'), index: pat ...
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
Java中AWT.Swing与SWT三大GUI技术的原理与效率差异 转 https://blog.csdn.net/weixin_37703598/article/details/81843810 ...