BZOJ3434: [Wc2014]时空穿梭
来源:互联网 发布:电视机屏幕检测软件 编辑:程序博客网 时间:2024/04/28 10:53
我们考虑怎么选取c个点满足有直线同时经过他们
设
由于每一维的
我们考虑枚举每一维的极差
因为所有坐标为正整数,第
设
所以有
反演一下
枚举
可以发现
到这里,因为后面的柿子和D仍然相关,仍然需要枚举
观察
接着把这
所以在维护了
时间复杂度
code:
#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<climits>#include<complex>#include<iostream>#include<algorithm>#define ll long longusing namespace std;inline void down(int &x,const int y){if(x>y)x=y;}const int maxn = 12;const int maxc = 21;const int maxm = 110000;const int Mod = 10007;int p[maxm],pri,miu[maxm];bool v[maxm];int C[maxm][maxc],f[maxc][maxm],pg[maxc][maxm][maxn];// miu*C pre G(i,c)×i^jvoid pre(){ C[0][0]=1; for(int i=1;i<maxm;i++) { C[i][0]=1; for(int j=1;j<maxc;j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%Mod; } miu[1]=1; /////////////////////////////////////////////////////////// for(int i=2;i<maxm;i++) { if(!v[i]) miu[i]=-1,p[++pri]=i; for(int j=1;j<=pri;j++) { int k=i*p[j]; if(k>=maxm) break; v[k]=true; if(i%p[j]==0) break; miu[k]=-miu[i]; } } for(int c=2;c<maxc;c++) { for(int i=1;i<maxm;i++) { for(int j=i,ji=1;j<maxm;j+=i,ji++) (f[c][j]+=C[i-1][c-2]*miu[ji]%Mod)%=Mod; } } for(int c=2;c<maxc;c++) { for(int i=1;i<maxm;i++) { for(int j=0,ij=1;j<maxn;j++,ij=ij*i%Mod) { pg[c][i][j]=(pg[c][i-1][j]+f[c][i]*ij%Mod)%Mod; } } }}int n,c;int m[maxn];int a[maxn],an;int main(){ pre(); int t; scanf("%d",&t); while(t--) { int mn=maxm; scanf("%d%d",&n,&c); for(int i=1;i<=n;i++) scanf("%d",&m[i]),m[i]--,down(mn,m[i]); int ret=0; for(int i=1;i<=mn;) { int r=mn; for(int j=1;j<=n;j++) down(r,m[j]/(m[j]/i)); a[an=0]=1; for(int j=1;j<=n;j++) { int mi=(m[j]/i)%Mod; int x1=(m[j]+1)*mi%Mod,x2=-mi*(mi+1)/2%Mod; a[an+1]=a[an]*x2%Mod; for(int l=an;l>=0;l--) a[l]=(a[l]*x1%Mod+(l?a[l-1]:0)*x2%Mod)%Mod; an++; } for(int j=0;j<=an;j++) (ret+=a[j]*((pg[c][r][j]-pg[c][i-1][j])%Mod)%Mod)%=Mod; i=r+1; } if(ret<0) ret+=Mod; printf("%d\n",ret); } return 0;}
- BZOJ3434: [Wc2014]时空穿梭
- 【bzoj 3434】 WC2014 时空穿梭 - 乱搞数学题
- BZOJ 3434 Wc2014 时空穿梭 莫比乌斯反演
- 关于时空穿梭
- Git穿梭时空
- 关于穿梭时空
- 时空穿梭和系统重启
- git--时空穿梭机--ife任务9
- 梦记录-时空穿梭~宇宙中根本没有时间概念.
- SVN+Myeclipse 代码的时空穿梭机和分身法术
- [时空穿梭] 读取80后小学经典课文记忆
- 时空穿梭,相对论,时空停滞,胡说八道,爱因斯坦根本没说过,有人借爱因斯坦之名,宣扬不可知论, 制造科学迷信,让人望而却步
- wc2014 紫荆花之恋
- 【WC2014】紫荆花之恋
- 穿梭车
- [BZOJ3435/UOJ55/WC2014]紫荆花之恋
- 平行时空
- 时空隧道
- CRC算法原理
- HDU1548 A strange lift 奇怪的电梯(BFS+队列)
- block,inline和inline-block的区别
- SPOJDISUBSTR
- [整理]各种各样的WebAPI接口
- BZOJ3434: [Wc2014]时空穿梭
- ActiveMQ的Queue与Topic区别
- [转]c++调用蜂鸣器
- codevs1077 多源最短路 Floyd
- 1007. 素数对猜想
- 一加3t 7.0 root
- [转]mysql中文排序
- 设计模式概述
- 提取txt或csv文件的一列