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

题面

BZOJ

洛谷

题解

考虑反过来做这个洗牌的操作,假定当前牌是第\(l\)张。

因为之前洗的时候考虑了前一半和后一半,所以根据\(l\)的奇偶性可以判定在前一半还是后一半,那么\(l/2\)就是在这一半里面在它前面的张数,这样子很容易就可以还原回去。暴力就有\(70\)分了。

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
ll n,m,l;
int main()
{
cin>>n>>m>>l;
while(m--)l=(l&1)?(n>>1)+(l>>1)+1:(l>>1);
cout<<l<<endl;
return 0;
}

那么我们现在正着考虑,当前位置是\(l\),洗完一次之后变到哪里去了呢?

如果\(l\le n/2\),那么是\(2l\),如果\(l\gt n/2\),那么是\((l-n/2)*2-1=2l-n-1\)

因为前半部分显然存在\(2l\le n\),而后半部分显然\(2l\gt n+1\),所以我们可以认为每次操作之后都由\(l\)位置变成了\(2l\% (n+1)\)位置。

那么进行了\(m\)次之后出现在了\(l\)位置,即:\(x*2^{m}\equiv l(mod\ n+1)\),而\(n\)是偶数,所以必然和前面的\(2^m\)互质,所以只需要求解一个逆元就好了。

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
ll n,m,l;
ll multi(ll a,ll b){ll s=0;while(b){if(b&1)s=(s+a)%(n+1);a=(a+a)%(n+1);b>>=1;}return s;}
ll fpow(ll a,ll b){ll s=1;while(b){if(b&1)s=multi(s,a);a=multi(a,a);b>>=1;}return s;}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){x=1;y=0;return a;}
ll d=exgcd(b,a%b,y,x);
y-=a/b*x;return d;
}
ll inv(ll a,ll b)
{
ll x,y;exgcd(a,b,x,y);
return (x%b+b)%b;
}
int main()
{
cin>>n>>m>>l;
l=multi(l,inv(fpow(2,m),n+1));
cout<<l<<endl;
return 0;
}

upd:

压行版本

#include<iostream>
using namespace std;
#define ll long long
ll n,m,l;
ll multi(ll a,ll b){ll s=0;while(b){if(b&1)s=(s+a)%(n+1);a=(a+a)%(n+1);b>>=1;}return s;}
ll fpow(ll a,ll b){ll s=1;while(b){if(b&1)s=multi(s,a);a=multi(a,a);b>>=1;}return s;}
void exgcd(ll a,ll b,ll &x,ll &y){(!b)?(x=1,y=0):(exgcd(b,a%b,y,x),y-=a/b*x);}
ll inv(ll a,ll b){ll x,y;exgcd(a,b,x,y);return (x%b+b)%b;}
int main()
{
cin>>n>>m>>l;
cout<<multi(l,inv(fpow(2,m),n+1));
return 0;
}

【BZOJ1965】[AHOI2005]洗牌(数论)的更多相关文章

  1. bzoj1965 [Ahoi2005]洗牌

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

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

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

  3. [luogu2054 AHOI2005] 洗牌 (数论)

    传送门 Solution 我们考虑每一步牌的变化: 前半部分的牌位置*2 后半部分的牌位置*2-n-1 那么我们可以看做是\(x\times 2^m\equiv l \pmod n\) 于是求个逆元就 ...

  4. [luogu P2054] [AHOI2005]洗牌

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

  5. P2054 [AHOI2005]洗牌

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

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

  7. 【bzoj1965】: [Ahoi2005]SHUFFLE 洗牌 数论-快速幂-扩展欧几里得

    [bzoj1965]: [Ahoi2005]SHUFFLE 洗牌 观察发现第x张牌 当x<=n/2 x=2x 当x>n/2 x=2x-n-1 好像就是 x=2x mod (n+1)  就好 ...

  8. BZOJ 1965: [Ahoi2005]SHUFFLE 洗牌( 数论 )

    对于第x个数, 下一轮它会到位置p. 当x<=N/2, p = x*2 当x>N/2, p = x*2%(N+1) 所以p = x*2%(N+1) 设一开始的位置为t, 那么t*2M%(N ...

  9. B1965 [Ahoi2005]SHUFFLE 洗牌 数论

    这个题的规律很好找,就是奇数直接除二,偶数除二加n/2.把这个规律整理一下就是(x * 2) % (n + 1),然后就直接求逆元就行了.一直30分的原因是qpow函数传参的时候用的int,然而变量是 ...

随机推荐

  1. IP数据库

    免费的IP数据库,qqwry.dat文件:通过读文件来获取ip地址的地区信息: QQWry.Dat的格式如下: +----------+| 文件头 | (8字节)+----------+| 记录区 | ...

  2. 微服务 Rpc和Rest协议

    原文:https://blog.csdn.net/king866/article/details/54174665 接口调用通常包含两个部分,序列化和通信协议.常见的序列化协议包括json.xml.h ...

  3. WPF listview Test Message list

    UI: <Window x:Class="WoZhuLianyuanTool.SendContentsWind" xmlns="http://schemas.mic ...

  4. 20155204《网络对抗》Exp7 网络欺诈防范

    20155204<网络对抗>Exp7 网络欺诈防范 一.基础问题回答 1.通常在什么场景下容易受到DNS spoof攻击 在不安全的网络环境下访问网站. 2.在日常生活工作中如何防范以上两 ...

  5. 20155206赵飞 基于《Arm试验箱的国密算法应用》课程设计个人报告

    20155206赵飞 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能1,2,3 . 1:LED闪烁实验 一.实验目的  学习GPIO原理  ...

  6. 20155321 《网络攻防》 Exp3 免杀原理与实践

    20155321 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 根据实验指导书,杀软有两个方法可以检测出恶意代码.第一种是基于特征码,即先对流行代码特 ...

  7. Spring-data-jpa 学习笔记(一)

    Spring家族越来越强大,作为一名javaWeb开发人员,学习Spring家族的东西是必须的.在此记录学习Spring-data-jpa的相关知识,方便后续查阅. 一.spring-data-jpa ...

  8. effective c++ 笔记 (23-25)

    //---------------------------15/04/08---------------------------- //#23   宁以non_member.non_friend替换m ...

  9. stl源码剖析 详细学习笔记 hashset hashmap

    //---------------------------15/03/26---------------------------- //hash_set { /* hash_set概述: 1:这是一个 ...

  10. 基于AngularJs的单页面程序

    基于AngularJs的单页面程序 在Abpzero的后台管理系统是一个AngularJs的单页面程序.当你登陆后,系统会跳转到"ApplicationController",然后 ...