BZOJ 4816 数字表格
2018-06-17 22:49:22来源:未知 阅读 ()
首先是惯例的吐槽。SDOI题目名称是一个循环,题目内容也是一个循环,基本上过几年就把之前的题目换成另一个名字出出来,喜大普奔亦可赛艇。学长说考SDOI可以考出联赛分数,%%%。
下面放解题报告。并不喜欢打莫比鸟斯的解题报告就是因为公式编辑太鬼。
不知道多少分算法:简单模拟不解释。
正解一眼是莫比鸟斯函数,话说上次考莫比鸟斯就是去年吧,好像题目名也叫数字表格,只不过多了一个前缀"Crash的"。
慢慢推吧,这里公式编辑器好像坏了?雾,贼慢。
假设n<=m;(if(n>m)swap(n,m);)
老套路,枚举(i,j),看被算了多少次。
//好像不是严格意义上的布尔表达式?差不多就是这个意思吧。
然后提前+替换,变成了
然后上面那一堆东西就是喜闻乐见的莫比鸟斯函数优化
变成这样一个鬼样子
上面那堆就是喜闻乐见的数论分块搞搞。
然后注意到其实下面这一段也可以分块... ...
还是要解释一下:
把指数那一堆设为Get(nn,mm),可以用数论分块算出来。
然后原式就变成了
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #define LL long long using namespace std; const int N = 1000010; const int Mod = 1000000007; const int Nmod = Mod-1; int n,m,f[N],miu[N],vis[N],P[N/10],tot,Ny[N]; int map[5010][5010]; LL Ans,ans; inline int gi() { int x=0,res=1;char ch=getchar(); while(ch<'0' || ch>'9'){if(ch=='-')res=-res;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar(); return x*res; } inline int QPow(int d,int z) { int _ans=1; for(;z;z>>=1,d=(LL)d*d%Mod) if(z&1)_ans=(LL)_ans*d%Mod; return _ans; } inline void pre() { f[1]=1; for(int i=2;i<N;++i){ f[i]=f[i-1]+f[i-2]; if(f[i]>=Mod)f[i]-=Mod; } f[0]=1; for(int i=1;i<N;++i) f[i]=(LL)f[i]*f[i-1]%Mod; for(int i=0;i<N;++i) Ny[i]=QPow(f[i],Mod-2); } inline void shai() { miu[1]=1; for(int i=2;i<N;++i){ if(!vis[i])P[++tot]=i,miu[i]=-1; for(int j=1;j<=tot;++j){ int Inc=i*P[j]; if(Inc>=N)break; vis[Inc]=1; if(i%P[j]==0)break; miu[Inc]=-miu[i]; } } for(int i=1;i<=N;++i) miu[i]=miu[i-1]+miu[i]; } inline int Get(int nn,int mm) { if(nn<=5000 && mm<=5000) if(map[nn][mm])return map[nn][mm]; ans=0; for(int l=1,r;l<=nn;l=r+1){ r=min(nn/(nn/l),mm/(mm/l)); ans+=1ll*(miu[r]-miu[l-1])*(nn/l)*(mm/l); } ans%=Nmod; if(nn<=5000 && mm<=5000)map[nn][mm]=ans; return ans; } int main() { pre();shai();int T=gi(); while(T--){ Ans=1;n=gi();m=gi();if(n>m)swap(n,m); for(int l=1,r;l<=n;l=r+1){ r=min(n/(n/l),m/(m/l)); Ans=1ll*Ans*QPow(1ll*f[r]*Ny[l-1]%Mod,Get(n/l,m/l))%Mod; } printf("%lld\n",Ans); } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:1003 电话连线
- bzoj3569 DZY Loves Chinese II 2020-05-25
- bzoj4036 [HAOI2015]按位或 2020-04-26
- 括号生成 2020-04-09
- L1-007 念数字 (10分) 2020-03-22
- Qt5小Demo之猜数字游戏 2020-03-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash