每日总结 2021.4.20

1.cf [1514C - Product 1 Modulo N](大意:给定一个n, 代表序列1,2…n-1,找乘积模n为1的最长的子序列。)

先上结论

结论:选所有与n互质的数的乘积记为mul,记p=mul%n。(1)若p==1,则直接输出选中的数,(2)若p!=1,输出p之外的其他数。

证明:(1)为什么选所有与n互质的数呢? 怎么想到的呢?(首先得知道和n不互质的数 %n 结果必大于1。)先来证明为什么是必大于1。 记某个不和n互质的数为x。(x<n就不考虑了)。x与n不互质。记g=gcd(x,n),则有g>1。因为x%n==(x/g)%(n/g)*g, 因为g>1 ,所以结果必达于1。这就是为什么我们要选与n互质的数相乘,一旦有一个数与n不互质,那他们的乘积与n也就不互质了。

(2)那为什么p!=1就输出p之外的数呢?为什么p是在之前所选的数中的一个呢? 先来看前面一个问题:

乘积为mul。mul%n=p即 mul=k*n+p,左右两边同除以p,哦吼,这不就是 mul/p=k /p *n+1,这不就是%n结果为1了吗? 那又要发问了,你怎么知道p是在选中的数的其中一个呢? 先来想想p是什么鬼东西,p是mul%n的值,所以 0<=p<=n-1。哦吼,这不就是题目给的原序列吗?只要p敢和n互质,我就敢肯定的说,你化成灰我都认识。再来看 因为gcd(mul,n)==gcd(n,mul%n)==1; 且 p=mul%n ; 所以gcd(p,n)==1,这下没跑了,认出p 的骨灰了。

到此证明结束。

2.cf[1513B - AND Sequences] 大意(定义前缀与运算prefi和后缀与运算sufi)给定一个长度为n的序列,对于任意的i,(1<=i<=n-1)prefi==sufi;求满足条件的排列个数

思路,对于此题首先要明白两个数a,b的
与运算结果<=min(a,b)

找到序列最小值出现的次数cnt(cnt>=2),记最小值对为x,对与任意的 i 满足a[i]&x==x;否则答案就是0。满足上述条件的排列数,即A(cnt,2)*A(n-2,n-2);证明如下
由 题 意 得 当 n = 3 时 p r e f 1 = s u f 2 ; p r e f 2 = s u f 3 不 难 得 出 , p r e f 1 > = p r e f 2 , s u f 3 > = s u f 2 所 以 p r e f 1 = p r e f 2 = p r e f 3 = s u f 1 = s u f 2 = s u f 3 。 推 广 到 n 也 成 立 即 b 1 = b n , 对 于 任 意 的 i ( 2 < = i < = n − 1 ) s u f i = b 1 ; 所 以 b 1 < = m i n ( b 1 , b i ) , b 1 为 最 小 值 。 由题意得 当n=3时 pref1=suf2; pref2=suf3 不难得出,pref1>=pref2,suf3>=suf2 所以 pref1=pref2=pref3=suf1=suf2=suf3。推广到n也成立 即b1=bn,对于任意的i(2<=i<=n-1)sufi=b1; 所以b1<=min(b1,bi),b1为最小值。 n=3pref1=suf2;pref2=suf3pref1>=pref2,suf3>=suf2pref1=pref2=pref3=suf1=suf2=suf3广nb1=bn,i(2<=i<=n1)sufi=b1;b1<=min(b1,bi),b1
(tip:位运算优先级低哟,记得加括号。)

3.acwing 子串变换(大意:给定一个起始字符串,一个目标字符串,给定一些变换规则,问最少需要几步可以将起始串变成目标串)(考察双向bfs。)直接搜索大致计算下时间复杂度,明显超时,并且有要求最小步数,所以考虑用双向广搜做。

4.洛谷 P5507 机关(难啃的题,大意:太复杂了)(做法A*或双向bfs())认真写一写对代码能力和对搜索的理解有很大的提高。当某个状态用二进制无法完全表示时,可以考虑多个二进制位共同表示某个状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值