首页 > 其他分享 >题解:P11410 闪耀之塔

题解:P11410 闪耀之塔

时间:2024-12-22 16:42:35浏览次数:3  
标签:a% int 题解 inv 逆元 qmi P11410 之塔 mod

题解:P11410 闪耀之塔

https://www.luogu.com.cn/problem/P11410

我们要想讲讲前置知识——蒙哥马利快速幂模求逆元。

前置知识逆元

定义

何为逆元?逆元,又称数论倒数。若整数 \(a\) 、 \(b\) 满足同余方程 \(a*b=1(mod\ n)\) ,那么 \(a\) , \(b\) 互为模 \(n\) 意义下的逆元。

前置 \(1\) :快速幂

给你三个整数 \(a\) , \(b\) , \(p\) ,求 \(a^b \bmod p\)。
如果直接算复杂度太高了,我们考虑优化。
我们知道 \(a^b\) 有两种情况,一种是 \(n\) 为偶数,一种是 \(n\) 为奇数。
因为 \(a^{m+n}=a^m+a^n\) ,所以当 \(n\) 为偶数时 \(a^n=a^{n/2}*a^{n/2}\) ,而当 \(n\) 为奇数时,则在此基础上再多乘上一个 \(a\) 就可以了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,p;
int qmi(int a,int b,int p){
	int x=1;
	while(b){
		if(b&1) x=x*a%p;
		a=a*a%p;
		b/=2;
	}
	return x;
}
signed main(){
	cin>>a>>b>>p;
	printf("%lld^%lld mod %lld=%lld\n",a,b,p,qmi(a,b,p));
	return 0;
}

前置 \(2\) :费马小定理

先来讲讲费马小定理。
费马小定理的原始状态: \(a^p ≡ a (mod\ p)\) ,其中 \(a\) , \(p\) 互质。
然后, 原式 => $a^p - a ≡0 (mod\ p) $ => \(a*(a^{p-1} - 1) ≡0 (mod\ p)\) => \(a^{p-1}-1 ≡0 (mod\ p)\) => \(a^{p-1} ≡1 (mod\ p)\) 。
这就是费马小定理的结论,求逆元时常用的。

蒙哥马利快速幂模

这个方法的的局限性很大,只有在 \(p\) 是质数的情况下才可以使用。
设 \(inv(a)\) 是 \(a\) 的逆元 由定义得, \(inv(a) * a ≡1 (mod\ p)\) 。
又有费马小定理 \(a^{p-1} ≡1\) , 易得 \(inv(a) * a ≡a^{p-1} (mod\ p)\) 。
移项,得: \(inv(a) ≡ a^{p-2}\) 。
然后这就是蒙哥马利快速幂模算法的一个前提条件: \(inv(a) ≡ a^{p-2} (mod\ p)\) 。

#include<bits/stdc++.h>
using namespace std;
int a,b,p;
int qmi(int a,int b,int p){
	int x=1;
	while(b){
		if(b&1) x=x*a%p;
		a=a*a%p;
		b>>=1;
	}
	return x;
}
int main(){
	cin>>a>>p;
	cout<<qmi(a,p-2,p)<<endl;
	return 0;
}

思路

回到本题,我们来讲讲思路。
首先可得两点性质。

  • 深度越大的点贡献越多,所以可以先按照每个点的编号赋值。
  • 又因为同深度的点贡献相同,所以同一层上的值可互换。

又因为题目里要求的是 \(q\) 的子树值之和,所以要让其子树里的值尽可能在交换同层值时取得更大。
设层数为 \(i\) ,结点 \(q\) 的深度为 \(d\) 。
枚举每一层,看其贪心的最大贡献,应填入尽量大的权值,即第 \(i\) 层的权值应该为长度为 \(2^{i-dep(u)+1}\) ,末项为 \(2^{i}-1\) ,公差为 \(1\) 的等差数列。
然后将其展开就会发现一个等比数列,由此解决此题。

code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int qmi(int a,int b){
	int x=1;
	while(b){
		if(b&1) x=x*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return x;
}
int n,q,k;
string s;
signed main(){
//	freopen("yxl.in","r",stdin);
//	freopen("yxl.out","w",stdout);
    cin>>n>>q;
    int inv=qmi(3,mod-2);//计算3的逆元
    while(q--){
        cin>>k>>s;
        printf("%lld\n",((qmi(2,k)-1ll)%mod*(qmi(4,n-k+1)-1ll)%mod*inv%mod+mod-(qmi(2,n-k)-1)%mod+2*1ll*(qmi(4,n-k)-1ll)%mod*inv%mod)%mod);
    }
    return 0;
}

OK,完结撒花。

yingxilin
JX の joker
2024-12-22于玉山一中

标签:a%,int,题解,inv,逆元,qmi,P11410,之塔,mod
From: https://www.cnblogs.com/yingxilin/p/18622244

相关文章

  • 题解:AT_abc294_g [ABC294G] Distance Queries on a Tree
    题目链接https://www.luogu.com.cn/problem/AT_abc294_g分析先不考虑修改。设\(dist_i\)表示从根节点到第\(i\)号节点的距离,\(\operatorname{lca(u,v)}\)表示树上两点\(u,v\)的最近公共祖先,那么\(u,v\)两点间的距离就是\((dist_{\operatorname{lca(u,v)}}-dist_u)+(......
  • CF2040D 题解
    构造题做得较少,所以性质观察得较慢。值域给的\(2n\)非常诡异,想到考虑\(2\)的倍数。按深度记录下每层结点,发现隔一层依次按\(2\)的倍数填充,即可满足。即:先填奇数层,再填偶数层。但是连续的偶数是不能相邻的,发现当深度在\([2,4]\)时,无论以何顺序按层填充,都会有问题。处......
  • 洛谷 P11411 兰奇的卡牌游戏——题解
    洛谷P11411兰奇的卡牌游戏传送锚点摸鱼环节兰奇的卡牌游戏题目描述作为制卡大师的兰奇,发明了一种自助型卡牌游戏。给定\(n\)张卡牌,第\(i\)张卡牌编号为\(i\),其权值为\(a_i\),卡牌的权值互不相同。这个卡牌游戏的规则需要自己生成。一开始,所有的牌都在备选区。从备选......
  • CF1548A Web of Lies 题解
    WebofLies题解洛谷。Codeforces。题意比较直接,就不复述了。思路分析题意首先根据操作3,删人只是暂时的,可以分析出每次删的人对于后面都没有影响。关注到这个词:执行以下操作直至不可再执行为止。显然,在整个图中所有该被删除的人都逃不掉,迟早被删除。那么看看什么样......
  • P8060 [POI2003] Sums 题解
    题目传送门前置知识同余最短路解法考虑同余最短路,设\(dis_{i}\)表示\(\bmoda_{1}=i\)时能被拼成的最小值,接着只需要判断是否有\(dis_{b\bmoda_{1}}\leb\)即可。直接建边的空间复杂度为\(O(nV)\),无法接受。但我们发现边不一定非要建出来,可以在Dijsktra松弛时枚......
  • 题解 - 冰壶比赛
    题目描述在3月29日举行的女子冰壶世锦赛决赛中,王冰玉、柳荫、岳清爽和周妍组成的中国女子冰壶队以8比6击败了冬奥会和世锦赛双冠王瑞典队,夺得了中国冰壶历史上第一枚世锦赛金牌,创造了历史。美丽、实力兼具的中国冰壶姑娘们也赢得了超高的赞誉。在冰壶比赛中,给出一个目标点......
  • 平民玩家体验《诛仙世界》进副本闪退频现?游戏问题解决当选云电脑
    嘿嘿,千盼万盼《诛仙世界》终于开服了!还有人没收到消息吗?这款游戏的虚幻5引擎非常的劲爆,对于经常玩一些3A大作的玩家都知道,这无疑是目前最好的游戏引擎,所打造出来的诛仙世界的画质也是相当顶级的。在开服的第一天,一些服务器的人数大幅激增;其中《风华绝代》的排队人数竟已超过12......
  • CF2049D 题解
    CF2049D题解题意给定一个\(n\timesm\)的数字矩阵和常数\(K\),初始位于\((1,1)\)点,只能通过向下或者向右走来到达\((n,m)\)点。存在某种操作,可以选择任意一行,将其所有列元素逆时针旋转\(1\)个单位,这个操作可以对任意行进行任意次(下面称这个操作为“旋转”)。设最后......
  • CF2049C 题解
    CF2049C题解关于MEX的构造题。题意有一个\(n\)元环,每个元素都和它的相邻元素是“朋友”。此外,额外给定一组\(x,y\),\(x\)和\(y\)彼此也是“朋友”。求一种给\(n\)个元素填数的方案,使得对于任意一个\(i\in[1,n]\),填在\(i\)这个位置的数\(a_i\),是它所有“朋友”的......
  • redis-cli (error) NOAUTH Authentication required问题解决
    1.查找redis-cli所在目录whichredis-cli2.切换到redis-cli目录3.切换到usr/bin目录执行以下命令redis-cli-hip-pport4.验证redis登录密码auth'password'5.获取redis数据......