ABC225

ABC225

A

签到

B

签到

C

有一个\(10^{100}*7\)的矩阵,第\(i,j\)项是\((i-1)*7+j\)

给定一个\(n*m\)的矩阵\(B\),判断矩阵\(B\)是否是\(A\)的某个部分

解:

每个数字比左边大一,比上边大七

\(7\)等于零的数字一定在一行末尾

D

链表模拟一下

E

平面上给定一些\(7\),占据\((x_i-1,y_i),(x_i,y_i),(x_i,y_i-1)\),求最少删除几个\(7\)让从原点看去每个\(7\)都互不遮挡

解:

把每个七的斜率范围求出来,做经典的最多线段不相交

\(sort\)\(cmp\)或$opertaor $中的判断条件绝对不能加等于号

F

给一堆字符串,选\(k\)个拼起来,求字典序最小的结果

解:

先经典地按\(a+b<b+a\)排序

为什么直接排序取前\(k\)个不对?

比如:\(zaa\)\(z\),排序后\(zaa\)应该在前,但如果\(k\)\(1\),只取\(z\)就对了

然后对字典序这种前面优先级高于后面的操作,我们应该倒着\(dp\),以保证最后更新的位置是最优的

\(dp[i][j]\)表示到\(i\)为止,取了\(k\)个字符的最优结果

\[dp[i][j]=min(dp[i+1][j],s[i]+dp[i+1][j-1]) \]

如果是顺序更新,上面的例子仍然会得到\(zaa\)的结果

G

给定\(n*m\)的网格,对于一个格点\((i,j)\),画一个叉可以得到\(A_{i,j}\),每画一笔付出\(C\),求最大收益

解:

这居然是网络流……

\(dp\)写了一下非常不可做

因为题目对贡献有加有减,所以尝试把贡献全部归约为减

先把所有的位置的贡献加起来

对于一个位置,要么不要它的贡献,要么付出划\(X\)的代价

建一个最小割模型

先从源点向所有位置连边\((st,id_{i,j},a_{i,j})\)

如果一个位置左上角和右上角还有位置,向左上和右上连边\((a_{i,j},左/右上角,c)\)

否则向汇点连边\((a_{i,j},ed,c)\)

图中的最小割就是应该减掉的贡献

posted @ 2021-11-04 21:17  lovelyred  阅读(198)  评论(0)    收藏  举报