2017-Sp130-team2

从 Trac 迁移的文章

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

原文章内容如下:

 [[Image(1.png,500px)]]
== 流水账 ==
开场各自看题,榜上有人过K和E,于是'''E1y12''','''K1y18'''。sub和yzc开了一波J,大力找了规律,yzc对拍了一下'''J1y54'''。cjb上机写G,反向边没初始化,'''G3y85'''。sub上机'''H1y94'''。yzc和sub讨论了B,yzc上机tle之后debug了一下'''B3y134'''。sub拿了个二次剩余板子'''I1y166''',cjb上机写F,没删文件名'''F2y203'''。sub和yzc讨论了C,'''C1y227''',之后rush D,cjb敲了三元环板子,sub上机rush,赛后10min通过。
== 总结 ==
=== chenjb ===
犯了些愚蠢错误,要注意。另外对于找最大割的题目可以考虑用一个很大的数减去w(假装在做负数)。
=== oipotato ===
=== subconscious  ===
== 题解 ==
 * A:

 * B:从根开始深搜,对于一个节点,二分出它的孩子中,从满k叉树到少一层的满k叉树的分界点,满k叉树的值可以预处理得到,递归分界点即可。

 * C:只需要令所有2*2的满足红=蓝即可,可以观察发现必须是相邻两行直接交替或相邻两列交替,统计下自由元数量即可。

 * D:把每个方块看成(x,y,z),将问题容斥,前一部分很好计算,最后部分是个三元环计数,上个板子即可。

 * E:对于a,a和0显然可以,然后满足n/2.0的都可以,因为可以取b=n-a,反之显然不行,所以答案为(n-1)/2 + 2。

 * F:小于sqrt(500)的质数只有8个,对于每个数字,分拆成mask和base,mask表述包含那8个小质数的状态,base为1或者分解后大于sqrt(500)的因子,这样就把所有数字按base分组了,除了base为1的物品在mask合法的情况下可以随便取,其他每种物品只能取1个,带mask做背包即可。

 * G:f[i][j]表示第i个人至多得到j个糖,S向f[i][1]连inf,然后f[i][j]向f[i][j+1]连1000-w[i][j]的边,f[i][m]向T连1000-w[i][m]的边,对于一组限制(x,y,z),若k-z<1则f[x][k]向S连inf边,否则k-z<=m则f[x][k]向f[y][k-z]连inf边,再否则向T连inf边,这些边限制了某些点必须在同一个集合。跑出答案后用n*1000-flow即可,这样实际上求了最大割。

 * H:极角序排序维护两边权值和即可。

 * I:两边乘以a[i]+a[j],设x=a[i]/a[j],可以得到x是一个二次剩余,大力判定数量即可,注意解出来之后要验算一遍。

 * J:观察发现进行2^i^次操作后,相当于求了一边mod 2^i^意义下的前缀异或和,直接倍增即可。

 * K:按定义推断数列即可。

 * L:

 * M:

 * [http://bestcoder.hdu.edu.cn/blog/2017-multi-university-training-contest-7-solutions-by-杭州二中/ Official]

流水账

开场各自看题,榜上有人过K和E,于是E1y12K1y18。sub和yzc开了一波J,大力找了规律,yzc对拍了一下J1y54。cjb上机写G,反向边没初始化,G3y85。sub上机H1y94。yzc和sub讨论了B,yzc上机tle之后debug了一下B3y134。sub拿了个二次剩余板子I1y166,cjb上机写F,没删文件名F2y203。sub和yzc讨论了C,C1y227,之后rush D,cjb敲了三元环板子,sub上机rush,赛后10min通过。

总结

chenjb

犯了些愚蠢错误,要注意。另外对于找最大割的题目可以考虑用一个很大的数减去w(假装在做负数)。

oipotato

subconscious

题解

  • A:
  • B:从根开始深搜,对于一个节点,二分出它的孩子中,从满k叉树到少一层的满k叉树的分界点,满k叉树的值可以预处理得到,递归分界点即可。
  • C:只需要令所有2*2的满足红=蓝即可,可以观察发现必须是相邻两行直接交替或相邻两列交替,统计下自由元数量即可。
  • D:把每个方块看成(x,y,z),将问题容斥,前一部分很好计算,最后部分是个三元环计数,上个板子即可。
  • E:对于a,a和0显然可以,然后满足n/2.0的都可以,因为可以取b=n-a,反之显然不行,所以答案为(n-1)/2 + 2。
  • F:小于sqrt(500)的质数只有8个,对于每个数字,分拆成mask和base,mask表述包含那8个小质数的状态,base为1或者分解后大于sqrt(500)的因子,这样就把所有数字按base分组了,除了base为1的物品在mask合法的情况下可以随便取,其他每种物品只能取1个,带mask做背包即可。
  • G:f[i][j]表示第i个人至多得到j个糖,S向f[i][1]连inf,然后f[i][j]向f[i][j+1]连1000-w[i][j]的边,f[i][m]向T连1000-w[i][m]的边,对于一组限制(x,y,z),若k-z<1则f[x][k]向S连inf边,否则k-z<=m则f[x][k]向f[y][k-z]连inf边,再否则向T连inf边,这些边限制了某些点必须在同一个集合。跑出答案后用n*1000-flow即可,这样实际上求了最大割。
  • H:极角序排序维护两边权值和即可。
  • I:两边乘以a[i]+a[j],设x=a[i]/a[j],可以得到x是一个二次剩余,大力判定数量即可,注意解出来之后要验算一遍。
  • J:观察发现进行2i次操作后,相当于求了一边mod 2i意义下的前缀异或和,直接倍增即可。
  • K:按定义推断数列即可。
  • L:
  • M:
  • Official
附加文件