2017-Sp317-team2

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

== 流水账 ==
=== chenjb ===
=== oipotato ===

=== subconscious  ===

== 题解 == 

 * A:cout<<(long long)(1+(long long)ceil((double)(n-b)/(b-a))*2)<<endl;

 * B:rep(i,n)printf("%d\n",(i-25000)*710);

 * C:连(x,y)->(x+1,y+1),(x,y+1)->(x+1,y)的白边和(x+1,y)->(x+1,y+1),(x,y)->(x,y+1)的黑边,交替走欧拉回路。

 * D:

 * E:换根dp

 * F:

 * G:

 * H:预处理出小于每个数字的最后一个前缀和的下标,这样就可以O(ans)求出答案,对询问进行记忆化之后,答案在1000以内的直接暴力,否则由于n会在1000以内,只会有1000次不同的询问。

 * I:两维分离,转化成2*n个点取最大+最小/2

 * J:做n-1轮,在第i轮的时候你已经知道了现在这张图上每个点j到j+i的方案数,如果跟最终的不一样,就在j到j+i连一条边,然后可以枚举求出j到j+i+1的方案数。

 * K:A可以取到最大值,剩下把周围四个矩形分别做,每次随便取能分割的一刀,不停递归直到只剩一个人即可。

 * L:SA后,等价于lcp+delta/delta,即最大化min(a[i..j])/(b[i]-b[j]),按a数组排序建kruskal重构树,然后启发式合并维护子树中两点差的最小值

 * M:直接统计即可,注意可能要用unordermap。

流水账

chenjb

oipotato

subconscious

题解

  • A:cout<<(long long)(1+(long long)ceil((double)(n-b)/(b-a))*2)<
  • B:rep(i,n)printf("%d\n",(i-25000)*710);
  • C:连(x,y)->(x+1,y+1),(x,y+1)->(x+1,y)的白边和(x+1,y)->(x+1,y+1),(x,y)->(x,y+1)的黑边,交替走欧拉回路。
  • D:
  • E:换根dp
  • F:
  • G:
  • H:预处理出小于每个数字的最后一个前缀和的下标,这样就可以O(ans)求出答案,对询问进行记忆化之后,答案在1000以内的直接暴力,否则由于n会在1000以内,只会有1000次不同的询问。
  • I:两维分离,转化成2*n个点取最大+最小/2
  • J:做n-1轮,在第i轮的时候你已经知道了现在这张图上每个点j到j+i的方案数,如果跟最终的不一样,就在j到j+i连一条边,然后可以枚举求出j到j+i+1的方案数。
  • K:A可以取到最大值,剩下把周围四个矩形分别做,每次随便取能分割的一刀,不停递归直到只剩一个人即可。
  • L:SA后,等价于lcp+delta/delta,即最大化min(a[i..j])/(b[i]-b[j]),按a数组排序建kruskal重构树,然后启发式合并维护子树中两点差的最小值
  • M:直接统计即可,注意可能要用unordermap。