洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)
来个正常的有证明的题解
我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置。
设数列\(\{a_{i_j}\}\)表示\(i\)号牌经过\(j\)次洗牌后的位置,我们试着来递推一下
首先,如果此刻牌在上面一叠,显然\(a_{i_{j+1}}=2a_{i_j}\)
接着,如果这张牌在下面一叠,那么\(a_{i_{j+1}}=2(a_{i_j}-\frac n2)-1=2a_{i_j}-(n+1)\),应该也很好推出来
写在一起,观察一下
\]
诶,两个式子都有一个系数\(2\)呢!那我们可不可以把它看成模\(n+1\)意义下的结果呢?
于是可以进一步得到\(a_{i_j}\equiv2^mi(\mod n+1)\)(\(i\)就是\(a_{i_0}\))
题目已经知道了\(a_{i_j}\),来求\(i\),不就是一个线性同余不定方程么?exgcd搞一下就好啦!因为\(\gcd(2^m,n+1)=1\),所以根本不用像青蛙的约会那样麻烦。
看楼上大佬用异或写swap?!第一次见的蒟蒻表示只能Orz。然后蒟蒻就把exgcd这个函数成功压缩到了一行。。。。。。
#include<cstdio>
#define LL long long
LL n,m,l,x=1,y;
LL qpow(LL b,LL k){//快速幂求2^m
LL a=1;
while(k){
if(k&1)a*=b,a%=n+1;
b*=b,b%=n+1;
k>>=1;
}
return a;
}
void exgcd(LL a,LL b){//一行exgcd233
if(b)exgcd(b,a%b),(y^=x^=y^=x)-=a/b*x;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&l);
exgcd(qpow(2,m),n+1);
printf("%lld\n",(l*x%(n+1)+n+1)%(n+1));//注意化成最小正整数
return 0;
}
洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)的更多相关文章
- 洛谷——P2054 [AHOI2005]洗牌(扩展欧几里得,逆元)
P2054 [AHOI2005]洗牌 扩展欧拉定理求逆元 $1 2 3 4 5 6$$4 1 5 2 6 3$$2 4 6 1 3 5$$1 2 3 4 5 6$ 手推一下样例,你就会发现是有规律的: ...
- 洛谷 P2054 [AHOI2005]洗牌
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- [luogu P2054] [AHOI2005]洗牌
[luogu P2054] [AHOI2005]洗牌 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学 ...
- P2054 [AHOI2005]洗牌
P2054 [AHOI2005]洗牌 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度 ...
- [BZOJ1965][AHOI2005] 洗牌 - 扩展欧几里得
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- 【BZOJ1965】[AHOI2005]洗牌(数论)
[BZOJ1965][AHOI2005]洗牌(数论) 题面 BZOJ 洛谷 题解 考虑反过来做这个洗牌的操作,假定当前牌是第\(l\)张. 因为之前洗的时候考虑了前一半和后一半,所以根据\(l\)的奇 ...
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...
- BZOJ3191或洛谷2059 [JLOI2013]卡牌游戏
BZOJ原题链接 洛谷原题链接 我们可以倒着来\(DP\). 设\(f[i][j]\)表示剩余\(i\)个人,从庄家数起第\(j\)个人的胜率,设当前枚举到第\(k\)张牌,该情况下这一轮淘汰的位置为 ...
- BZOJ 1965 洗牌(扩展欧几里得)
容易发现,对于牌堆里第x张牌,在一次洗牌后会变成2*x%(n+1)的位置. 于是问题就变成了求x*2^m%(n+1)=L,x在[1,n]范围内的解. 显然可以用扩展欧几里得求出. # include ...
随机推荐
- 【LeetCode105】Construct Binary Tree from Preorder and Inorder Traversal★★
1.题目 2.思路 3.java代码 //测试 public class BuildTreeUsingInorderAndPreorder { public static void main(Stri ...
- git 提交新增文件到网站
git add -A 是将所有的修改都提交.你可以用git status查看当前的变化,然后通过git add xxx有选择的提交.git commit 是将变化先提交到本地.git commit - ...
- [Oracle]构筑TDE 环境的例子
构筑TDE 环境的例子: 测试环境:12.1.0.2 $ cd $ORACLE_HOME/network/admin$ vim sqlnet.ora $ pwd/u01/app/oracle/prod ...
- 机器学习sklearn19.0聚类算法——Kmeans算法
一.关于聚类及相似度.距离的知识点 二.k-means算法思想与流程 三.sklearn中对于kmeans算法的参数 四.代码示例以及应用的知识点简介 (1)make_blobs:聚类数据生成器 sk ...
- nginx location url解析过程
- Ionic 2.0 相关资料
原文发表于我的技术博客 本文汇总了学习 Ionic 2 的相关资料,也算是一个 Ionic Awesome 列表,供大家参考,有需要分享的可以留言. 原文发表于我的技术博客 1. 文档 1.1 Ion ...
- 系统重启后DNS地址默认修改修改引起的一次事故(Tomcat报错:java.net.UnknownHostException)
事故描述:公司的一个内部业务系统由于程序bug,导致系统崩溃,需要强制重启服务器.系统重启后,赶紧将业务程序启动.随后发现/etc/resolv.conf文件的DNS地址被修改成了默认地址.发现之后, ...
- ul ol li的序号编号样式
序号样式例子,下面是html代码(做参考) <ol> <li>列表内容列表内容列表内容列表</li> <li>列表内容列表内容列表内容列表</li ...
- Linux课题实践三——程序破解
2.3 程序破解 20135318 刘浩晨 1. 掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一 ...
- 第三次Sprint
Not CHECKED OUT CHECKED OUT DONE!: SPRINT GOAL: BETA-READY 修改bug 完善界面