寒假集训【1.26】

1月26

时间段

记录

备注

8:00---8:30

 

 

 

 请假

 

 

 

 

8:30---9:00

 

9:00----9:30

 

9:30---10:00

 

10:00—10:30

 

10:30---11:00

 

11:00---11:30

 

11:30---13:30

午休 

 

13:30---14:00

看书+3道小例题

 

14:00—14:30

 

14:30—15:00

 

15:00—15:30

费解的开关

 

15:30---16:00

 

16:00---16:30

 

16:30---17:00

汉诺塔问题

 

17:00---18:30

 

 

18:30—21:30

汉诺塔问题

 

Sumdiv(分治)

 

 

整理今日

 

 

分享交流:

 

(待书写)

 

附:可以贴各种资料或题解

费解的开关

若固定了第一行,则若改变第i行某位数字,若i-1行已经固定,则只能点击i+1行的该位置上的数字才可以。

递归妙!!!!真的妙。

 

汉诺塔问题

1、汉诺塔三塔问题 d[n]=2*d[n-1]+1

2、汉诺塔四塔问题 f[n]=min{x*f[i]+d[n-i]}

3、汉诺塔m盘n塔问题。f[i][j]=minf[k][j]∗2+f[i−k][j−1]。设f[i][j]为有i个盘子j个柱子时的最少步数. 那么肯定是把一些上面盘子移动到某根不是j的柱子上, 然后把剩下的盘子移动到j, 然后再把上面的盘子移动到j. 于是就有递推式f[i][j]=min{f[k][j]∗2+f[i−k][j−1],f[i][j]}

 寒假集训【1.26】_第1张图片

Sumdiv

求A^B的所有约数之和mod 9901

 寒假集训【1.26】_第2张图片

 寒假集训【1.26】_第3张图片

1、(看到满串公式就脑壳疼)理解不了为啥用乘法分配律就可以从约数集合得到那个式子,后来在onglu大佬的帮助之下成功理解(在线%神仙)。

2、后面那个分治法求sum真的是妙啊,等比数列这么一提,妙,真的妙。经过二分再配合快速幂,时间复杂度瞬间下降(书上是O(logc),然鹅我不会算(雾,妙啊)。

3、然后我就卡死在实现上了qaq。

4、分解质因数竟然不会写了,素数筛也忘了(我可能是个废人)晚上重学素数筛。

5、想得脑壳疼。最终在某位大佬的某篇博客的帮助下,写出来了(不容易啊qaq)

6、数学真妙啊!

 

我jio的很有必要贴一下我的AC代码

#include
using namespace std;
const int maxn=5000+3;
const int mod=9901;
inline int read(){
   int s=0,w=1;
   char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } int A,B,cnt,prime[maxn]; long long factor[100][2];//0存因子,1存次方. void getprime( );//素数筛 int getfactors(long long x);//分解质因数 long long ksm(long long a,long long b);//快速幂 long long sum(long long p,long long n);//核心公式 int main(){ int A,B; A=read(); B=read(); getprime(); long long ans=1; getfactors(A); for(int i=0;i){ ans*=(sum(factor[i][0],B*factor[i][1])%mod); ans%=mod; } printf("%d",ans); return 0; } void getprime( ){ memset(prime,0,sizeof(prime)); for(int i=2;i<=maxn;i++){ if(!prime[i]) prime[++prime[0]]=i; for(int j=1;j<=prime[0]&&prime[j]){ prime[prime[j]*i]=1; if(i%prime[j]==0) break; } } } int getfactors(long long x){ cnt=0; long long tmp=x; for(int i=1;prime[i]<=tmp/prime[i];i++){ factor[cnt][1]=0; if(tmp%prime[i]==0){ factor[cnt][0]=prime[i]; while(tmp%prime[i]==0){ factor[cnt][1]++; tmp/=prime[i]; } cnt++; } } if(tmp!=1){ factor[cnt][0]=tmp; factor[cnt++][1]=1; } return cnt; } long long ksm(long long a,long long b){ long long res=1; long long tmp=a%mod; while(b){ if(b&1){ res*=tmp; res%=mod; } b>>=1; tmp*=tmp; tmp%=mod; } return res; } long long sum(long long p,long long n){ if(p==0)return 0; if(n==0)return 1; if(n&1){ return((1+ksm(p,n/2+1))%mod*sum(p,n/2)%mod)%mod; } else return((1+ksm(p,n/2+1))%mod*sum(p,n/2-1)+ksm(p,n/2)%mod)%mod; }

 

转载于:https://www.cnblogs.com/Shayndel/p/10330204.html

你可能感兴趣的:(寒假集训【1.26】)