POI2004.docVIP

  • 16
  • 0
  • 约4.61千字
  • 约 5页
  • 2017-02-06 发布于重庆
  • 举报
POI2004

POI2004 未完整解决的有: kag 算法不如标程 zga,mis 不会 题号 核心算法 具体细节 gra 模型转化+sg函数 S1:若a[n]=m-1,则只能移动最后一枚棋子,Ans=1。 S2:若谁移动后所有棋子都在[m-n-1..m-2],则胜。故可转化模型:两个空格之间作为楼梯,m-2与m-1间作为地面,连续棋子数B作为石子数,则成为经典问题(见论文)。 结论:该游戏Sg函数为奇数格棋子数的Xor和S。 优化:对于转化后连续的奇数个0等价于1个0,连续偶数个0等价于2个0。 可行策略: 奇数楼梯i:S xor b[i]b[i] 偶数楼梯i:b[i-1]S xor b[i-1]=b[i-1]+b[i] pin 枚举 S1:询问((1,1,1,1),(1……0……1)),确定哪些数字未出现过。16次。 S2:根据可能数字集大小K别处理。 K={a} Ans=aaaa。 K={a,b,c,d} 询问类似((0,1,1,1),(0,1,1,1))以确定某个位置是不是某个数字。 K={a,b,c} 枚举,若发现某数字x无法匹配到某位置,那么先匹配另外两个,则剩下的两个位置均为x。 K={a,b} 两种情况:abbb与aabb。若某次匹配成功,则剩下的都是另一个数字,否则枚举C(4,2)来确定a即可。 需要次数最多的为aabb,2*4+C(4,2)=14次。 szn 贪心+树形DP+二分枚举 P1:F[i]表示以i为根的子树以及i连向其祖先的边均已被覆盖,所需的最少路径数。 转移:将i的儿子两两配对,拿出一个连向i的祖先。 F[i]=∑F[j]-Si/2+ord(si为偶且i1) Ans1=F[root] {j为i的儿子,Si为i的儿子数目} P2:二分枚举答案Ans2,G[i]表示以i为根的子树中所有路径长度不超过Ans2时连向i祖先的路经的最小长度,Ans2可行当且仅当G[root]存在且G[root]=Ans2。 求G[i]前我们先求出所有G[j]并将它们从小到大排序,然后二分枚举G[i]=G[j]+1,若剩下的G[j]头尾配对均不超过Ans2则G[i]可行。 细节:Si为偶数时可添加G[k+1]=0方便处理。 szp 贪心+拓扑排序 初始所有点为白色,对于点i,若e[i]为白色则将其染成与c[i]不同的颜色。 证明:若点i确定为白色,e[i]染白色也只能提供一个黑点,故e[i]染黑色不会差;若所有指向i得点均为黑色,则i只能是白色。 使用拓扑排序实现,一开始将无入度的点入队,最后剩下的环从任意处切开即可。 zaw 最短路+枚举+集合划分优化 基本算法:枚举走的第一条边(1,i),以i为起点求到1的最短路即可。 优化:基本算法实质是把i作为起点集合,其余与1相邻的点作为终点集合,求两个集合间的最短路。实际上我们只需要满足任意两个与1相邻的点i,j至少有两次(分别作起点终点)划分不在同一个集合中即可,故我们可以 for p := 0 to log(n) do for i := 1 to n do if i 与 1相邻 then if i的第p和二进制为1 then i∈集合1 else i∈集合2 求最短路(集合1 to 集合2) 求最短路(集合2 to 集合1) 最短路使用SPFA或Dj+heap皆可。 mos 贪心 设T={a,b……c,d,e}(由小到大) 当前,将d与e移过去,有两种选择: S1={e,a}{a}{d,a}{a}=e+a+d+a S2={a,b}{b}{d,e}{a}=b+b+e+a 若S1=S2,则移e(d的移动取决于c)否则将d,e一 起移过去,证明如下: 因为S1S2,故第一步移e,那么第二步必然移动c,d: S3={e,a}{a}{a,b}{b}{c,d}{a}=e+a+b+b+d+a, S2’=S2+{a,c}{a}=b+b+e+a+c+a S2’-S3=c-d=0,故先移d,e更优。 bra 迭代 将除0,1外所有点标0,利用SPFA更新不合法节点直到所有点均满足给定条件,设此时标号为F[i]。然后标1再做一次,设此时标号为G[i]。 对于i,若F[i]=G[i],则该点标号确定为F[i],否则该点标号不确定,证明如下: 每一步中每个点至多更新两次。以第一步为例,第一次更新必然是1 to not 1,这只会使得1的个数减少,那么其余点的更新也只能是变小,故每个点至多1 to 1/2 to 0共两次更新。 F[i]=i可取的最大值。G[i]=i可取的最小值。 由1的证明可类似证得。故可由F[i]与G[i]确定i的标号范围。 jas 模型转化+贪

文档评论(0)

1亿VIP精品文档

相关文档