2020 ICPC, Indonesia Multi-Provincial Contest

2020 ICPC, Indonesia Multi-Provincial Contest

和神仙 jzp,thecold 打力一场比赛,被带着拿到了 38 名,下面写下简要题解

A. Arena of Greed

一堆金币,两个人轮流拿

  • 当前金币个数是奇数,只能拿一颗
  • 当前金币个数是偶数,可以拿一半或一颗

两个人最优化操作,求先手获得金币个数最多是多少

思考一下,如果当前是奇数没得选,不再讨论,偶数就有可能选一半或一个。

如果选一半以后变成偶数,那么我就选一个,因为选一半代表着对方能拿走至少剩下石子的一半,而事实上我可以让它更少,选一个以后对方只能选一个,这时候再选主动权就还在自己手里,对方永远不会拿到石子的一半。

注意当 n 等于 4 的时候要特判

代码

B. Blue and Red of Our Faculty!

给个花朵🌼一样的图,即中心节点是 1 号点,剩下是一些环,这些环互不相交,它们都挂在 1 号节点上。

两个人从 1 号点开始走,每秒同时走一条边,走过一条边就打上标记表示不可以再次经过,直到两人无路可走。

问方案数,两个方案不同当且仅当两种方案两人的路径集合不一样。

这题很好想到,就是有些细节,容易发现两人肯定在一个花瓣上相遇动弹不得,剩下的花瓣只能整片走过,所以我们枚举它们相遇的位置,剩下的部分背包即可,背包时直接记录两者路径长度之差,最后要特判在 1 号点相遇和在和 1 号点相邻的边处相遇的方案数。

代码

C. Captain of Knights

暂时不会

D. Danger of Mad Snakes

所有数据都是 \(1000\) 级别的,给个地图,上面有些龙,龙有价值 \(b_i\),你选中 m 条龙,如果一条龙切比雪夫距离 d 内有选中龙,那么它对此方案有 $b_i $的贡献,一次选中方案的价值是所有龙贡献和的平方。

总价值和为

\[\sum(\sum_{i \in s}b_i)^2=\sum_{}(\sum_{i=1}\sum_{j=1}[i \in s][j \in s]b_ib_j)\\ =\sum_{i=1}\sum_{j=1}b_ib_j\times S_{i,j} \]

所以我们考虑两条龙都被选中的方案数,这个方案就是 (总方案数 - A 龙未被选中的方案数 - B 龙未被选中的方案数 + A,B 均未被选中的方案数)

利用二维前缀和就可以轻松求出了。

代码

E. Excitation of Atoms

不想放题面了,大细节题。

容易发现 k 较大的没有用,直接来回变把次数浪费掉即可

分类讨论即可,对于 \(k = 0\),直接枚举要激活哪个即可

对于 \(k \ge 2\),就是拿价值的总和减去前 \(n-1\) 个中最小的代价即可。可以让最小的代价所在的点 x 指向 1 号点,让 x - 1 指向 x + 1 ,这样就有一条 \(x \to 1 \to x-1\to x+1\to n\) 的覆盖所有点的路径了,显然最优。

对于 \(k = 1\),细节较多

  • 让 1 号点随便指,剩下的当 \(k=0\)
  • 选一个前缀 \(1 \to i\),让 i 指向 1,激活 1 到 i 最小值的位置,这样就把 \(1 \to i\) 全部消掉了,然后后缀选个最大值即可。
  • 如果 1 号点激活代价小,价值大,我们就不好舍弃它,激活一个点付出的代价太大,我们就不会激活第二个点,所以如果选 1 号点,那么除了第二种情况,也可以在中间跳一个价值小的点去

这样就可以通过此题了。确实不易思考全面。

代码

F. Flamingoes of Mystery

太水不说

H. Huge Boxes of Animal Toys

太水不说

I. Impressive Harvesting of The Orchard

看了看别人的 ac 代码,清一色的全是暴力 \(\Theta(n^2)\),本机造了个极限数据,有个程序只跑了 \(2.93s\),这个故事告诉我们,暴力 yyds,考场白给了一道题/(ㄒoㄒ)/~~

posted @ 2020-09-27 19:42  Hs-black  阅读(602)  评论(2编辑  收藏  举报