首页 > 代码库 > ACM/ICPC2016 青岛区域赛

ACM/ICPC2016 青岛区域赛

A(hdu5982)、(模拟)

  题意:输入n对数,将每对数相乘并相加

  分析:模拟

B(hdu5983)、(模拟)

  题意:给你一个二阶魔方,问能否通过一次旋转使得给定魔方的每个面颜色相同

  分析:模拟

C(hdu5984)、(数学,微分方程)

  题意:有一个长为d的木棒,最右端有长为L的区域(L<=d),每次操作从木棒的某个部位切,左边的部分就全扔掉,右边的部分保留下来视为新的木棒,一直到切到右端的L区域为止才停止才做,求操作次数的数学期望。

  分析:先考虑离散的,f[i]表示长为i的木棒的数学期望,则f[i]=Σ(f[k]+1)/(i-L) (L<=i<=d,L<=k<=i),尝试将小数扩大成整数,但发现精度不够。

     然后把他写成积分形式:f(x)=∫f(i)di/x(0<=i<=x)  + 1,于是问题就是解这个微分方程,解出f‘(x)=1/x,所以f(x)=lnx+C,代入原式解得C=1-lnL

     所以结果就是lnd+1-lnL=ln(d/L)+1

G(hdu5988)、(费用流)

  题意:给你个图,每个点上都有人的数量和包的数量,要求人通过走动满足每个点的包的数量>=人的数量,每条边有容量和一个走动破坏概率pi,表示如果一个人走这条边,那么有pi的概率破坏这条边(但这条边被首次经过的时候破坏概率是0),求最小的破坏概率

  分析:明显的费用流,这里是乘积所以取对数变成加法

     将问题看作要求不破坏概率最大

     对于人的数量>=包的数量的点i,S->i,容量为差值,费用为0,对于人的数量<=包的数量的点i,i->S,容量为差值,费用为0

     另外原图中的每条边都要拆一条出来,容量为1,费用为0,保证先走这个第一次走不破坏的

     然后就是求S->T的最大费用最大流

     注意事项:

       由于精度问题,不能取ln,可以取log2或者log10

       实数spfa的时候,松弛操作一定要加eps!不然会TLE

ACM/ICPC2016 青岛区域赛