洛谷题目传送门

来个正常的有证明的题解

我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置。

设数列\(\{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)\),应该也很好推出来

写在一起,观察一下

\[a_{i_{j+1}}=\begin{cases}2a_{i_j}\qquad\qquad\ ,a_{i_j}\leq\frac n2\\2a_{i_j}-(n+1),a_{i_j}>\frac n2\end{cases}
\]

诶,两个式子都有一个系数\(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]洗牌(扩展欧几里德)的更多相关文章

  1. 洛谷——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$ 手推一下样例,你就会发现是有规律的: ...

  2. 洛谷 P2054 [AHOI2005]洗牌

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  3. [luogu P2054] [AHOI2005]洗牌

    [luogu P2054] [AHOI2005]洗牌 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学 ...

  4. P2054 [AHOI2005]洗牌

    P2054 [AHOI2005]洗牌 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度 ...

  5. [BZOJ1965][AHOI2005] 洗牌 - 扩展欧几里得

    题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...

  6. 【BZOJ1965】[AHOI2005]洗牌(数论)

    [BZOJ1965][AHOI2005]洗牌(数论) 题面 BZOJ 洛谷 题解 考虑反过来做这个洗牌的操作,假定当前牌是第\(l\)张. 因为之前洗的时候考虑了前一半和后一半,所以根据\(l\)的奇 ...

  7. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  8. BZOJ3191或洛谷2059 [JLOI2013]卡牌游戏

    BZOJ原题链接 洛谷原题链接 我们可以倒着来\(DP\). 设\(f[i][j]\)表示剩余\(i\)个人,从庄家数起第\(j\)个人的胜率,设当前枚举到第\(k\)张牌,该情况下这一轮淘汰的位置为 ...

  9. BZOJ 1965 洗牌(扩展欧几里得)

    容易发现,对于牌堆里第x张牌,在一次洗牌后会变成2*x%(n+1)的位置. 于是问题就变成了求x*2^m%(n+1)=L,x在[1,n]范围内的解. 显然可以用扩展欧几里得求出. # include ...

随机推荐

  1. java算法----排序----(2)选择排序

    package log; public class Test4 { /** * java算法---选择排序 * * @param args */ public static void main(Str ...

  2. Django 学习 (第四部)

    1.Django请求的生命周期 首先是url---->路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户2.路由系统{建立路由关系urls.py (fu ...

  3. 面试3——java集合类总结(Map)

    1.概述: Java 中的map集合使用键值对(key-value)来保持数据,其中值(value)可以重复,键(key)必须唯一,但最多只能有一个key为空,它的主要实现类有HashMap.Hash ...

  4. elaticsear no [query] registered for [filtered] 错误

    1.问题描述 执行语句: GET /megacorp/employee/_search { "query" : { "filtered" : { "f ...

  5. 金蝶PDA金蝶盘点机金蝶仓库条码管理方案-采购入库单教程

    采购入库单有两种做法: 第一种:按照采购订单下推的采购入库单. 第二种:直接新增采购入库单,也就是不按照采购订单下推. 按照采购订单下推生成采购入库单,会以采购订单的商品品种和数量作为应收.扫描条码入 ...

  6. zabbix监控主机cpu达到80%后报警

    在zabbix监控中,默认cpu监控模板中的触发器,当负载在一定时间内(比如最近5分钟)超过5以上为报警阀值.但是在实际场景中,由于服务器配置不一样,这个默认的cpu触发器用起来意义就不大了,这时候就 ...

  7. cross-env简介

    是什么 运行跨平台设置和使用环境变量的脚本 出现原因 当您使用NODE_ENV =production, 来设置环境变量时,大多数Windows命令提示将会阻塞(报错). (异常是Windows上的B ...

  8. Popush End

    coconut: (咳咳)作为一名后台开发者,我觉得自己在这次作业完成中最大的收获就是跟node.js的异步模型打交道.首先我得出了一个这样的结论:异步模型能够提高服务器的高性能并发请求,但是却加大了 ...

  9. 嵌入式linux教程

    串口通信minicom $ sudo apt-get install minicom ///安装 # minicom –s //运行 //CTRL+A Z 弹出菜单       2.NFS网络文件配置 ...

  10. 【评分】Alpha阶段

    [评分]Alpha阶段 总结 按时交 - 有分 晚交 - 0分 迟交一周以上 - 倒扣本次作业分数 抄袭 - 倒扣本次作业分数 请大家回忆一下第一次作业的总结:http://www.cnblogs.c ...