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 ...
随机推荐
- Selenium定位class包含空格的元素-复合class节点
在HTML中, 节点有三种常见属性, 分别是id, name和class, 其中class是一个特殊的属性, 支持多个类名, 以空格隔开, 如下图所示: 你是否注意到, 为什么selenium中的fi ...
- SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuatio
点击 文档>>设置文件编码>>Unicode>>Unicode(UTF-8)
- sscanf简介
#include<cstdio> #include<cstring> using namespace std; int main() { ]; //用法一:取指定长度的字符串 ...
- elasticsearch-head后台运行
运行插件 # npm run start > elasticsearch-head@0.0.0 start /usr/local/elasticsearch-head-master > g ...
- SpringMVC 请求映射注解
@GetMapping: 处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”, method = RequestMet ...
- easyUI之Accordion(分类)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- manager 实现进程之间的数据共享 list dict
manager 能够实现进程之间的数据共享 (list,dict) 如果多个进程同事修改同一份共享数据,这个时候需要加锁,保证数据的准确性. (1) dict list 可以实现进程之间的数据共享 ( ...
- ssm整合用到的web.xml配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns ...
- Redis Guide
1. Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,hyperloglogs等数 ...
- Linux学习—mysql安装配置及远程连接
安装前准备 1.检查是否已经安装过mysql 执行命令 [root@localhost /]# rpm -qa | grep mysql 从执行结果,可以看出我们已经安装了mysql-libs-5. ...