Difference between revisions of "XX Open Cup named after E.V. Pankratiev. Grand Prix of Siberia, Division 1."

From EOJ Wiki
Jump to navigation Jump to search
 
(3 intermediate revisions by the same user not shown)
Line 2: Line 2:
  
 
Solved by Kilo_5723. 0:09 (+)
 
Solved by Kilo_5723. 0:09 (+)
 +
 +
题意:给定一个 $1/2$ 的矩阵,重新上色尽可能少的格子使得任意两点之间都有一条 $1,2$ 相间的路径。
 +
 +
题解:根据路径长度的奇偶性质,两点之间的曼哈顿距离如果是奇数则颜色不同,否则颜色相同,也就是说最终矩阵会像棋盘一样染色。两种染色方法取改动较少的。
  
 
== Problem B ==
 
== Problem B ==
Line 34: Line 38:
  
 
Solved by Kilo_5723. 1:05 (+)
 
Solved by Kilo_5723. 1:05 (+)
 +
 +
题意:有 $n$ 场比赛,有胜负平三种可能,每场胜负平的概率已知。有 $k$ 张选票,第 $i$ 张选票能对 $n$ 个赌局中的 $a_i$ 个填一个选项,$b_i$ 个填两个选项,$c_i$ 个填三个选项,如果每场比赛的结果都被一张选票填选了,可以获得 $k$ 的利润,每张选票有一个价格,资金有限,求最大总利润的期望值。资金与利润无关。
 +
 +
题解:本题有两部分。第一部分是对每张选票求出赌中全部比赛的可能性,第二部分是对每张选票的价格和胜率求出最大总利润。第一部分是一个三维背包,三维分别表示当前填取一个,两个,三个选项的次数。第二部分则是一个普通的背包问题。
  
 
== Problem G ==
 
== Problem G ==
Line 68: Line 76:
  
 
Upsolved by Kilo_5723.
 
Upsolved by Kilo_5723.
 +
 +
题意:给出一个 $n\times n$ 的矩阵,其中 $n$ 个元素出线了恰好一次,剩下所有元素都出现了恰好两次,用最少的交换次数将其变成对称矩阵。
 +
 +
题解:先对对角线上的每个元素依次处理:
 +
 +
* 如果它只出现了一次,跳过。
 +
 +
* 如果它第二次也出现在了对角线上,记录下来并跳过。
 +
 +
* 否则,将它的位置和第二次出现的对称位置上的数交换,继续。
 +
 +
接下来,对矩阵中所有和对称位置上的数不相等的数进行如下操作:
 +
 +
* 如果它和它对称位置上的数都只出现了一次,将这两个数分别与之前记录的某个数出现的两个位置交换。
 +
 +
* 否则对于它和它对称位置上出现了两次的某个数,将另一个数于该数出现的另一个位置交换。
  
 
== Problem K ==
 
== Problem K ==

Latest revision as of 08:42, 19 February 2020

Problem A

Solved by Kilo_5723. 0:09 (+)

题意:给定一个 $1/2$ 的矩阵,重新上色尽可能少的格子使得任意两点之间都有一条 $1,2$ 相间的路径。

题解:根据路径长度的奇偶性质,两点之间的曼哈顿距离如果是奇数则颜色不同,否则颜色相同,也就是说最终矩阵会像棋盘一样染色。两种染色方法取改动较少的。

Problem B

Upsolved by Weaver_zhu.

题意:给出一个nxm 迷宫 x 不能走 . 能走 ? 待定,求一种方案填满问号之后能走的格子最多。且满足每个能走的格子有且仅有一条路径走到最后一行或一列。同时走路径只能向下或向右走

题解:插头dp,记录状态并不需要 $nm2^{m}$,因为只需要记录行和行之间的 bitmask 转移就行了,加上滚动数组就不会mle了

Problem C

Unsolved.

Problem D

Solved by Weaver_zhu. 4:32 (+7)

题意:O(log) 求整系数一元三次方程的整数解

题解:卡精度的毒瘤题,先求导求零点求出单调区间,然后二分出一个整数解,然后再因式分解出二次方程再求另两个。坑点是所有操作都得用Int128,二分单调的时候要缩小范围+特判极值点才能保证整数的二分是正确的,并且试出来的解要是整数才行

Problem E

Solved by Xiejiadong. 0:07 (+)

题意:可以将数列的每一个数变成当前数的倍数,要求数列满足递增。

题解:将每一个数尽可能小的变成大于前一个数,而且是当前数的倍数即可。

Problem F

Solved by Kilo_5723. 1:05 (+)

题意:有 $n$ 场比赛,有胜负平三种可能,每场胜负平的概率已知。有 $k$ 张选票,第 $i$ 张选票能对 $n$ 个赌局中的 $a_i$ 个填一个选项,$b_i$ 个填两个选项,$c_i$ 个填三个选项,如果每场比赛的结果都被一张选票填选了,可以获得 $k$ 的利润,每张选票有一个价格,资金有限,求最大总利润的期望值。资金与利润无关。

题解:本题有两部分。第一部分是对每张选票求出赌中全部比赛的可能性,第二部分是对每张选票的价格和胜率求出最大总利润。第一部分是一个三维背包,三维分别表示当前填取一个,两个,三个选项的次数。第二部分则是一个普通的背包问题。

Problem G

Solved by Xiejiadong. 2:41 (+1)

题意:每次可以去掉 $1\times k$ 的区间里的石头,询问去掉 $1$ 到 $n$ 行中,$[l,r]$ 列里面的石头至少需要几次操作。

题解:显然对于每一行,可以单独考虑。

考虑每一行的每一列作为开头的时候,操作 $1$ 次,最多可以处理到第几列(需要跳过本来就为空的位置)。

之后就可以用倍增的方式得到,从每一个行的每一列开始处理 $2^k$ 次,可以处理到第几列。

对于每次询问,考虑每一行所需要的次数,用预处理出来的结果进行逼近即可得到。

Problem H

Solved by Xiejiadong && Kilo_5723. 0:41 (+)

题意:每次可以询问两个数的大小,需要通过不多余 $n+20$ 次询问,询问出 $n$ 个数中的次大值。

题解:考虑分治的方法求最小值的时候,会选择左边的最小值和右边的最小值比较得到更小的。

而显然次小值,一定是在和最小值做比较的时候被淘汰的,于是考虑,保存下很每一个数比较的时候淘汰的数,得到最小值以后,通过这个数淘汰的数中选择最小的,显然就是次小值。

显然,被淘汰的数,由分治的层数决定,不会超过 $log_2n$ 个。

Problem I

Unsolved.

Problem J

Upsolved by Kilo_5723.

题意:给出一个 $n\times n$ 的矩阵,其中 $n$ 个元素出线了恰好一次,剩下所有元素都出现了恰好两次,用最少的交换次数将其变成对称矩阵。

题解:先对对角线上的每个元素依次处理:

  • 如果它只出现了一次,跳过。
  • 如果它第二次也出现在了对角线上,记录下来并跳过。
  • 否则,将它的位置和第二次出现的对称位置上的数交换,继续。

接下来,对矩阵中所有和对称位置上的数不相等的数进行如下操作:

  • 如果它和它对称位置上的数都只出现了一次,将这两个数分别与之前记录的某个数出现的两个位置交换。
  • 否则对于它和它对称位置上出现了两次的某个数,将另一个数于该数出现的另一个位置交换。

Problem K

Solved by Weaver_zhu. 0:50 (+1)

题意:一棵树,每个边上有流量和容量,求以每个点为根的情况下,叶子节点为多个源头,根为终点的最大流

题解:树型换根dp