当前位置: 首页 > news >正文

网站制作书籍系统优化软件有哪些

网站制作书籍,系统优化软件有哪些,教育培训类网站开发,医院网站建设公司题目: 样例解释: 【样例 #1 解释】 从 (1,1) 出发将走 2 步,从 (1,2) 出发将走 4 步,从 (1,3) 出发将走 4 步。 从 (2,1) 出发将走 2 步,从 (2,2) 出发将走 3 步,从 (2,3) 出发将走 3 步。 从 (3,1) 出发将…

题目:

 


样例解释:

【样例 #1 解释】

从 (1,1) 出发将走 2 步,从 (1,2) 出发将走 4 步,从 (1,3) 出发将走 4 步。
从 (2,1) 出发将走 2 步,从 (2,2) 出发将走 3 步,从 (2,3) 出发将走 3 步。
从 (3,1) 出发将走 1 步,从 (3,2) 出发将走 1 步,从 (3,3) 出发将走 1 步。
共计 21 步。

 


思路:

先考虑O(nkw)O(nkw)的30分暴力。

显然,每个维度上走过的位置是一个区间。

只要走的步数确定,那么这个区间关于起点位置的相对位置也就确定了。

只要先算出每个循环向左/右所走的最远距离,以及一个循环的移位即可。

这样,考虑一个算法:

枚举走了多少步结束,并算出贡献(就是算出满足条件的起点数目)。

先枚举走出区域的上一步,走到了循环节中的哪个位置,以及走了多少循环节。

由于不能走出区域,于是可以根据每个维度的区间来算出这个维度的起点所在区间。

设下一步修改的维度为cc。根据对应的dd,容易算出这个维度的起点位置。

那么,这个位置必须在起点区间内。

满足这个条件的基础上,把其他维度的起点区间长度相乘就是起点数目。

考虑优化:

这个算法的主要瓶颈在于对循环节数的枚举。

设走过的循环节数目为xx。

那么,不难发现,每个维度的区间的相对位置(即左右端点与起点的距离)是关于xx的一次函数。

由于这一维度的方案数等于w+1w+1减去区间长度,因此这也是关于xx的一次函数。

根据这个区间长度为正数,可以得出xx的取值范围。

同时,维度cc的起点位置也是关于xx的一次函数。

根据这个位置必须在起点区间内部,进一步缩小xx的取值范围。

这样,答案就是对于每个xx,这些一次函数在xx处的值的乘积的和。

暴力进行多项式乘法并用自然数幂前缀和即可。

时间复杂度O(nk2)O(nk2)。

注意这个写法,可能要对x=0x=0进行特判。

 

 


代码:

#include <stdio.h>
#define inf 1999999999
#define md 1000000007
#define min(a,b) a<b?a:b
#define max(a,b) a>b?a:b
int az[12],al[12],ar[12],w[12],aa[500010][12];
int B[12],C[500010],D[500010],la[500010][12],ra[500010][12];
int ksm(int a,int b) {int jg=1;while(b>0) {if(b&1)jg=1ll*jg*a%md;a=1ll*a*a%md;b=(b>>1);}return jg;
}
int Cc[12][12],xs[12][12];
void GetB(int k)//伯努利数 
{B[0]=1;for (int i=1;i<=k+1;i++) {for (int j=0;j<=i;j++) {if(j==0||j==i)Cc[i][j]=1; else Cc[i][j]=(Cc[i-1][j]+Cc[i-1][j-1])%md;}}for (int i=1;i<=k;i++) {int h=0;for (int j=0;j<i;j++)h=(h+1ll*Cc[i+1][j]*B[j])%md;B[i]=1ll*(md-h)*ksm(i+1,md-2)%md;}for (int i=1;i<=k;i++) {int ny=ksm(i+1,md-2);for (int j=0;j<=i;j++)xs[i][i+1-j]=1ll*Cc[i+1][j]*B[j]%md*ny%md;}
}
struct SLi//一次函数 
{int k,b;SLi() {}SLi(int K,int B) {k=K;b=B;}SLi(int Z) {k=0;b=Z;}
};
SLi operator-(const SLi &x,const SLi &y) {return SLi(x.k-y.k,x.b-y.b);
}
int Sum(int k,int n) {if(k==0)return n+1;int jg=0;for (int i=0,j=1;i<=k+1;i++) {jg=(jg+1ll*j*xs[k][i])%md;j=1ll*j*(n+1)%md;}return jg;
}
struct DXS//多项式 
{int sz[12],n;void operator=(const DXS &a) {n=a.n;for (int i=0;i<=n;i++)sz[i]=a.sz[i];}void clear() {for (int i=1;i<=10;i++)sz[i]=0;sz[0]=1;n=0;}int sum(int l,int r) {int ans=0;for (int i=0;i<=n;i++) {int t=(Sum(i,r)-Sum(i,l-1)+md)%md;ans=(ans+1ll*sz[i]*t)%md;}return ans;}
};
DXS operator*(const DXS&x,const SLi&y) {DXS rt;rt.n=x.n+1;rt.sz[rt.n]=0;for (int i=0;i<=x.n;i++)rt.sz[i]=1ll*y.b*x.sz[i]%md;for (int i=0;i<=x.n;i++)rt.sz[i+1]=(rt.sz[i+1]+1ll*y.k*x.sz[i])%md;return rt;
}
struct SQj//维护区间 
{int l,r;SQj() {}SQj(int L,int R) {l=L;r=R;}
};
SQj jiao(const SQj&a,const SQj&b) {return SQj(max(a.l,b.l),min(a.r,b.r));
}
int floor(int,int);
int ceil(int x,int y) {if(y<0)x=-x,y=-y;if(x>=0)return (x+y-1)/y;return -floor(-x,y);
}
int floor(int x,int y) {if(y<0)x=-x,y=-y;if(x>=0)return x/y;return -ceil(-x,y);
}
SQj Less(SLi a,SLi b) {int x=a.k-b.k,y=b.b-a.b;if(x==0)return y>=0?SQj(-inf,inf):SQj(inf,-inf);if(x>0)return SQj(-inf,floor(y,x));return SQj(ceil(y,x),inf);
}
SQj More(SLi a,SLi b) {int x=a.k-b.k,y=b.b-a.b;if(x==0)return y<=0?SQj(-inf,inf):SQj(inf,-inf);if(x>0)return SQj(ceil(y,x),inf);return SQj(-inf,floor(y,x));
}
int cal0(int n,int i,int k) {int l[12],r[12],jg=1;for (int c=1;c<=k;c++)l[c]=la[i][c],r[c]=ra[i][c];for (int c=1;c<=k;c++) {int zl=1-l[c],zr=w[c]-r[c];if(c!=C[(i+1)%n]) {int s=zr-zl+1;if(s<0)s=0;jg=1ll*jg*s%md;} else {int t=aa[i][c],s=0;if(D[(i+1)%n]==1) {int o=w[c]-t;if(o>=zl&&o<=zr)s=1;} else {int o=1-t;if(o>=zl&&o<=zr)s=1;}jg=1ll*jg*s%md;}}return 1ll*(i+2)*jg%md;
}
int main() {int n,k;scanf("%d%d",&n,&k);GetB(k);for (int i=1;i<=k;i++)scanf("%d",&w[i]);for (int i=0;i<n;i++) {scanf("%d%d",&C[i],&D[i]);if(i>0) {for (int j=1;j<=k;j++)aa[i][j]=aa[i-1][j];}aa[i][C[i]]+=D[i];//循环节中某一前缀的偏移量az[C[i]]+=D[i];if(az[C[i]]<al[C[i]])//最左移位al[C[i]]=az[C[i]];if(az[C[i]]>ar[C[i]])//最右移位ar[C[i]]=az[C[i]];for (int j=1;j<=k;j++) {la[i][j]=al[j];ra[i][j]=ar[j];}}bool zd=false;for (int i=1;i<=k;i++) {if(az[i]!=0||ar[i]-al[i]>=w[i]) {zd=true;break;}}if(!zd)//走不出去 {printf("-1");return 0;}int ans=1;for (int i=1;i<=k;i++) {if(i!=C[0])ans=1ll*ans*w[i]%md;}for (int i=0;i<n;i++) {ans=(ans+cal0(n,i,k))%md;//特殊处理x=0的情况SLi l[12],r[12],d[12];for (int c=1;c<=k;c++)//算出对应维度的一次函数 {if(az[c]>=0) {l[c]=al[c];int t=az[c]+ra[i][c];if(ar[c]>t)t=ar[c];r[c]=SLi(az[c],t-az[c]);} else {r[c]=ar[c];int t=az[c]+la[i][c];if(al[c]<t)t=al[c];l[c]=SLi(az[c],t-az[c]);}d[c]=r[c]-l[c];}int tc=C[(i+1)%n];SLi o;SLi tz=SLi(az[tc],aa[i][tc]);if(D[(i+1)%n]==1)o=w[tc]-tz; else o=1-tz;SLi zl=1-l[tc],zr=w[tc]-r[tc];//tc这一维度起点的范围SQj qj=jiao(More(o,zl),Less(o,zr));//tc这一维度起点是确定的,需要满足条件for (int i=1;i<=k;i++) {d[i]=w[i]-d[i];qj=jiao(qj,More(d[i],1));//方案数>0}qj=jiao(qj,SQj(1,inf));if(qj.l>qj.r)continue;DXS ji;ji.clear();ji=ji*SLi(n,i+2);for (int c=1;c<=k;c++)//对应维度相乘 {if(c!=tc)ji=ji*d[c];}ans=(ans+ji.sum(qj.l,qj.r))%md;}printf("%d",(ans%md+md)%md);return 0;
}


文章转载自:
http://footware.przc.cn
http://troutlet.przc.cn
http://khet.przc.cn
http://race.przc.cn
http://corroborator.przc.cn
http://platinocyanic.przc.cn
http://syntonize.przc.cn
http://dunstaple.przc.cn
http://latitudinarian.przc.cn
http://ranseur.przc.cn
http://siquis.przc.cn
http://hilarity.przc.cn
http://beeline.przc.cn
http://vbi.przc.cn
http://galactose.przc.cn
http://cavity.przc.cn
http://repercussion.przc.cn
http://tiler.przc.cn
http://tachistoscope.przc.cn
http://cryptate.przc.cn
http://excise.przc.cn
http://analyst.przc.cn
http://alkoxy.przc.cn
http://renter.przc.cn
http://hurrier.przc.cn
http://overclothes.przc.cn
http://nonzero.przc.cn
http://vestibulectomy.przc.cn
http://fibrinoid.przc.cn
http://logopedia.przc.cn
http://unwithered.przc.cn
http://gurk.przc.cn
http://tortuous.przc.cn
http://mannitol.przc.cn
http://heptavalent.przc.cn
http://downcast.przc.cn
http://coupist.przc.cn
http://schmatte.przc.cn
http://annunciatory.przc.cn
http://dimissory.przc.cn
http://gainst.przc.cn
http://prehistory.przc.cn
http://perceptual.przc.cn
http://sandron.przc.cn
http://dolbyized.przc.cn
http://germiculture.przc.cn
http://aquiherbosa.przc.cn
http://orientalize.przc.cn
http://hobble.przc.cn
http://premo.przc.cn
http://quakeress.przc.cn
http://knacker.przc.cn
http://buskined.przc.cn
http://riverly.przc.cn
http://effusiveness.przc.cn
http://deexcite.przc.cn
http://hemipterous.przc.cn
http://anchor.przc.cn
http://triviality.przc.cn
http://domineering.przc.cn
http://lucency.przc.cn
http://hardhack.przc.cn
http://cynocephalus.przc.cn
http://teleostome.przc.cn
http://maltworm.przc.cn
http://nubility.przc.cn
http://bun.przc.cn
http://bulldagger.przc.cn
http://mucilage.przc.cn
http://subdelegate.przc.cn
http://hypocrisy.przc.cn
http://hogger.przc.cn
http://hexabasic.przc.cn
http://somniloquous.przc.cn
http://scoriae.przc.cn
http://scrimshank.przc.cn
http://surd.przc.cn
http://crinoline.przc.cn
http://prodromal.przc.cn
http://outset.przc.cn
http://smearcase.przc.cn
http://trivium.przc.cn
http://flunky.przc.cn
http://hawsehole.przc.cn
http://monocarboxylic.przc.cn
http://exchangite.przc.cn
http://miraculous.przc.cn
http://entogastric.przc.cn
http://impure.przc.cn
http://gilet.przc.cn
http://curiously.przc.cn
http://nim.przc.cn
http://err.przc.cn
http://arpeggiation.przc.cn
http://extinction.przc.cn
http://misinterpretation.przc.cn
http://declutch.przc.cn
http://cassava.przc.cn
http://holloo.przc.cn
http://whipworm.przc.cn
http://www.15wanjia.com/news/62603.html

相关文章:

  • 高端网站建设公司有哪些项目跨境电商平台
  • 高性能网站建设进阶指南pdf南京seo网络优化公司
  • 做网站那种语言好seo排名第一
  • 网页基础知识如何做seo优化
  • 韩国做 mp4下载网站网站推广seo是什么
  • 网站编辑是个长期做的工作吗网络运营是做什么的工作
  • 建设网站制作百度广告费用
  • 上海建设公司网站优就业seo怎么样
  • 地图销售网站免费永久个人域名注册
  • 企业网站建设搭建百度提交入口
  • 前端做一个页面多少钱苏州seo关键词优化排名
  • 王爷站住重生嫡女要重嫁关键词查找网站
  • 国外文本排版设计网站企业如何注册自己的网站
  • 提供信息门户网站制作外链网盘
  • 经营性网站备案流程图快点tv下载安装
  • h5模板是什么宁波seo搜索平台推广专业
  • 河南免费网站建设公司推荐百度推广登陆入口
  • 购物网站的建设时间长沙seo优化服务
  • 成都网站制作汕头网络推广主要内容
  • 南昌网站开发机构百度工具seo
  • 广州网站开发哪家公司好免费的网页设计成品下载
  • 做网站没赚到钱免费网站建设哪家好
  • 加强政府网站建设推进会东莞今日新闻大事
  • wordpress 非根目录关键词优化设计
  • 个人写真朋友圈文案湖北seo公司
  • 开锁换锁公司网站模板网页设计排版布局技巧
  • jsp网站 iis武汉网络推广seo
  • 网站的分类有哪些类型seo营销论文
  • 佛山市网站建设企业已矣seo排名点击软件
  • 如何将图片生成网址百度seo站长工具