呵呵哒,1001的dfs返回值写错,wa了两发就没分了,1002显然是PAM可是我没学过啊!!!压位暴力可不可以。。。看看范围貌似不行,弃疗。。。1003根本不会做,1004想了想lcc发现不可做,那就是仙人掌分治,没写完囧。。。

最后Rating+69滚粗了。。。

官方题解:

1001 Untitled

对于一组可能的答案cc,如果先对一个觉小的c_ic​i​​取模,再对一个较大的c_jc​j​​取模,那么这个较大的c_jc​j​​肯定是没有用的。因此最终的答案序列中的cc肯定是不增的。那么就枚举选哪些数字,并从大到小取模看看结果是否是00就可以了。时间复杂度O(2^n)O(2​n​​).

1002 Three Palindromes

对原串前缀和后缀作一个01标记pre[i],suf[i]表示1-i和i-n能否能形成回文。记以i为中心的回文半径为r(i)。

这些都可以在O(N)时间内求出。也可以使用Hash+二分等方法O(NlogN)内求出。

我们考虑中间一个回文串的位置,不妨设它是奇数长度(偶数类似)。

那么问题变成了求一个i和d使得1<=d<=r(i)且pre[i-d]和suf[i+d]为真。

枚举i,实际上就是问pre[i-r(i)..i-1]和suf[i+1..i+r(i)]取反后 这两段有没有一个位置两者均为1,也就是and后不为0,暴力压位即可。

总时间复杂度为O(N^2/32)O(N​2​​/32)。

1003 Gcd and Lcm

详见推导。

Ans=\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\sum_{l=1}^n [(i,j),(k,l)]Ans=∑​i=1​n​​∑​j=1​n​​∑​k=1​n​​∑​l=1​n​​[(i,j),(k,l)] 不妨先考虑下式

r(n,d)=\sum_{i=1}^n\sum_{j=1}^n [(i,j)=d]r(n,d)=∑​i=1​n​​∑​j=1​n​​[(i,j)=d]

令f(n)=r(n,1),则r(n,d)可以等价于f(n/d)。

f(n)=sum_{i=1}^{n}\sum_{j=1}^{n}f(n)=sum​i=1​n​​∑​j=1​n​​ e[(i,j)] (e为单位函数) = sum_{d=1}^{n} u(d) [n/d]^{2}=sum​d=1​n​​u(d)[n/d]​2​​

令d1=(i,j),d2=(k,l)那么不难得出

Ans=\sum_{d1=1}^n\sum_{d2=1}^n [d1,d2] f(n/d1)f(n/d2)Ans=∑​d1=1​n​​∑​d2=1​n​​[d1,d2]f(n/d1)f(n/d2)

令p=(d1,d2)则

\sum_{p=1}^n\sum_{d1=1}^{n/p}\sum_{d2=1}^{n/p} p*d1*d2*f(n/p/d1)*f(n/p/d2) e((d1,d2))∑​p=1​n​​∑​d1=1​n/p​​∑​d2=1​n/p​​p∗d1∗d2∗f(n/p/d1)∗f(n/p/d2)e((d1,d2))

\sum_{p=1}^n\sum_{q=1}^{n/p}\sum_{d1=1}^{n/p/q}\sum_{d2=1}^{n/p/q} u(q)*p*q*q*d1*d2*f(n/q/d1)*f(n/q/d2)∑​p=1​n​​∑​q=1​n/p​​∑​d1=1​n/p/q​​∑​d2=1​n/p/q​​u(q)∗p∗q∗q∗d1∗d2∗f(n/q/d1)∗f(n/q/d2)

令T=p*qT=p∗q

令g(n)=\sum_{d=1}^{n} u(d) f(n/d)^2g(n)=∑​d=1​n​​u(d)f(n/d)​2​​

s(n)=\sum_{d|n} u(d)*d^2*(n/d)s(n)=∑​d∣n​​u(d)∗d​2​​∗(n/d)

则化简得Ans=\sum_{T=1}^n s(T)*g(n/T)Ans=∑​T=1​n​​s(T)∗g(n/T)

s为积性函数,可以O(N)时间内预处理出1-N的所有函数值。 可惜的是g并非积性函数,但我们亦可以在O(sqrt(N))的时间求出g(N)。 在最后的答案中我们对g(n/T)的每种取值均算一遍即可,注意多组数据时记忆化。

1004 Dynamic Cactus

考虑离线,并对仙人掌进行分治。

类似于树的点分,每次的分治中心无非是两种情况:节点或者环。

这样每次新建节点时就去更新过分治中心的答案。

为了保证更新答案的两个点分属不同子树:

对于普通节点,只要维护最大和在另一子树的次大距离即可;对于环,由于环上的距离计算存在序的问题以及两种走法,我们可以在环上任选一个开始位置,需要分前后两部分更新和询问,可以用四个BIT维护前缀后缀和正负符号。

总时间复杂度为O(NlogNlogN)O(NlogNlogN)。

1001:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<cstring>
  7. #define PAU putchar(' ')
  8. #define ENT putchar('\n')
  9. using namespace std;
  10. const int maxn=+,inf=1e9;
  11. inline int read(){
  12. int x=,sig=;char ch=getchar();
  13. while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
  14. while(isdigit(ch))x=*x+ch-'',ch=getchar();
  15. return x*=sig;
  16. }
  17. inline void write(int x){
  18. if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
  19. int len=,buf[];while(x)buf[len++]=x%,x/=;
  20. for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
  21. }
  22. int A[maxn],T,n,p[maxn],num;
  23. int dfs(int now,int l,int tot){
  24. if(l>n)return inf;
  25. if(now%p[l]==)return tot;
  26. return min(dfs(now%p[l],l+,tot+),dfs(now,l+,tot));
  27. }
  28. void init(){
  29. T=read();
  30. while(T--){
  31. n=read();num=read();
  32. for(int i=;i<=n;i++)A[i]=read();
  33. if(num==){puts("");continue;}
  34. sort(A+,A++n);
  35. for(int i=;i<=n;i++)p[i]=A[n-i+];
  36. //for(int i=1;i<=n;i++)write(p[i]),PAU;
  37. int tmp=dfs(num,,);
  38. if(tmp!=inf)write(tmp),ENT;
  39. else puts("-1");
  40. //write(dfs(num,1));ENT;
  41. }
  42.  
  43. return;
  44. }
  45. void work(){
  46. return;
  47. }
  48. void print(){
  49. return;
  50. }
  51. int main(){init();work();print();return ;}

BestCoder Round #49的更多相关文章

  1. Manacher BestCoder Round #49 ($) 1002 Three Palindromes

    题目传送门 /* Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间 ...

  2. DFS BestCoder Round #49 ($) 1001 Untitled

    题目传送门 /* DFS:从大到小取模,因为对比自己大的数取模没意义,可以剪枝.但是我从小到大也过了,可能没啥大数据 */ /************************************* ...

  3. CodeForce Round#49 untitled (Hdu 5339)

    Untitled Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  4. hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

    传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131 ...

  5. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  6. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

  7. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  8. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  9. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

随机推荐

  1. Android 图片选择器

    图片选择器,遍历系统所有图片并显示,点击查看大图,长按选中,并将结果返回 字体颜色res/color建立text_selecor.xml <selector xmlns:android=&quo ...

  2. 算法9-5:最大流算法的Java代码

    残留网络 在介绍最大流算法之前先介绍一下什么是残留网络.残余网络的概念有点类似于集合中的补集概念. 下图是残余网络的样例. 上面的网络是原始网络.以下的网络是计算出的残留网络.残留网络的作用就是用来描 ...

  3. CF 19D Points 【线段树+平衡树】

    在平面上进行三种操作: 1.add x y:在平面上添加一个点(x,y) 2.remove x y:将平面上的点(x,y)删除 3.find x y:在平面上寻找一个点,使这个点的横坐标大于x,纵坐标 ...

  4. diy 电脑 重装系统

    1\组装好电脑 2\硬盘的红灯只亮一会,找不到 硬盘 .bios里 硬盘设置里 IDE修改为 ACHI即可. 3\老毛桃 \ 用桌面的那个分区软件 分区 100G,300G 4\找到U盘 的iso 文 ...

  5. call()与apply()区别

    一.方法的定义 call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call ...

  6. datazen logo修改

    第一步:进入cp 页面 第二步: P161说明文档的P161开始,这里有说有版本的图片命名 第三步:再次强调第二步的命名,否则 如果你直接复制这个名字,不但效果出不来,还删除不掉这个包,我上次是把da ...

  7. 织梦dede自定义内容分页,datalist运用实例

    在/plus文件夹中新建一个ceshi.php文件..<?php require(dirname(__FILE__)."/../include/common.inc.php" ...

  8. xfire找不到services.xml

    java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened be ...

  9. iOS开发之字典数据建立模型步骤

    1. 在控制器属性的(questions)set方法中完成字典转模型的操作 - (NSArray *)questions { if (nil == _questions) { //1.加载plist文 ...

  10. Object Storage(Swift)安装过程——Havana

    自从看了Havana安装文档有关Swift的安装一节,发现H版的安装过程与以前还是有些差别的.不过大致过程还是那些.下面简单介绍下我们安装的过程吧,具体请参考官方文档http://docs.opens ...