CF #684 div.2 目前 ABC
A. Buy the String
题意:给定一个二进制串(01),其中,消除字符0需要C0花费,消除字符1需要C1花费,特别地,可以花费h对字符取反,问最少花费多少。
思路:入门题 ,很明显只要3种可能全变为1消费,全变为0消费,照原来消费(比较下单次操作价格即可,如 c0+h<c1,则全变为0)
代码: 略
B. Sum of Medians
题意:定义中位数为一个数组的递增序列的第 ⌈ n 2 ⌉ \lceil \frac{n}{2}\rceil ⌈2n⌉个元素,给定一个 n*k 长度的数组,要求将它分为k个n长度的数组,问各个数组中位数之和最大为多少
思路: 入门题 ,稍加思索,就可知道每个n长度数组中有 n -
⌈
n
2
⌉
\lceil \frac{n}{2}\rceil
⌈2n⌉个元素大于该中位数,因此处理为递增(或递减)每隔n -
⌈
n
2
⌉
\lceil \frac{n}{2}\rceil
⌈2n⌉取一个数,即可
代码:略
C1. Binary Table (Easy Version)
题目:C1. Binary Table (Easy Version)
题意:给定一个二维的二进制矩阵,定义一个操作:在2*2的矩阵内,任意挑选3格将它们取反,问需要多少次操作可以将它变为全0矩阵,输出任意一个 k(0 ≤ \leq ≤ k ≤ \leq ≤ 3 * nm) 次操作和其每次操作所选取的格子。
思路:入门题之我是傻子 ,这是简单版本,和困难版本,不同的是k的范围,这也是一个最大的提示,3*nm,我们发现经过3次操作,就可以把1个1处理为0,同时又不改变其他数字,因此,方法就出来了,对整个矩阵的1进行这3次操作。
[
0
0
0
0
]
\left[\begin{array}{cc} 0&0 \\ 0 &0 \end{array}\right]
[0000]
⟶
\longrightarrow
⟶
[
1
1
1
0
]
\left[\begin{array}{cc} 1&1 \\ 1 &0 \end{array}\right]
[1110]
⟶
\longrightarrow
⟶
[
2
1
2
1
]
\left[\begin{array}{cc} 2&1 \\ 2 &1 \end{array}\right]
[2211]
⟶
\longrightarrow
⟶
[
3
2
2
2
]
\left[\begin{array}{cc} 3&2 \\ 2 &2 \end{array}\right]
[3222]
其中矩阵中数字代表为取反次数(取反2次等于不处理)
特别地,要处理边界情况
关键代码:
if (a[i][j] == '1') {
register int t1 = 1, t2 = 1;
//处理边界
if (i == n) t1 = -1;
if (j == m) t2 = -1;
printf("%d %d %d %d %d %d\n", i, j, i + t1, j, i, j + t2);
printf("%d %d %d %d %d %d\n", i, j, i + t1, j, i + t1, j + t2);
printf("%d %d %d %d %d %d\n", i, j, i, j + t2, i + t1, j + t2);
}
结尾
蒟蒻不定时补题,有生之年 ,主要是为了监督自己做题补题
呜呜呜,近期期中考试周,还有在刷紫书,会补的会补的