codeforces 295 (div1) 题解

前言

年代久远的一套CF,然而vp时仍旧只能写出AB两题。这套题思维难度其实不大,而且就连E题数据结构题都没到百行,我深感自己能力欠缺。

A

key
  • 差分
题意

有一个长度为n的序列,m种操作可以给一个区间加上一个值,k次每次执行下标连续的一段操作,求最终序列。

思路

对每个操作做几次和每个元素加多少各做一次差分。 O ( n ) O(n) O(n)

B

key
  • floyd
题意

一张图,按给定序列把每个点都去掉,求每次操作后剩下点两两之间的最短路权值之和。

思路

倒着做,也就是每次加入一个点(和[JSOI2008]星球大战类似),以加入点为中间点floyd更新。 O ( n 3 ) O(n^3) O(n3)

C

key
  • DP
题意

用一条船让所有人过河,船有限重,人只有50或100千克两种,求最小开船次数和方案数。

思路

一开始想直接爆搜,不行胡乱加了个记忆化,然后判断最小开船次数的函数写挂了。

不如直接DP更直观, f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示已经开了 i i i次,当前岸边有 j j j个50千克, k k k个100千克的方案数。 i i i最大是 4 n 4n 4n,所以复杂度 O ( n 5 ) O(n^5) O(n5)不到一点O(能过)

D

key
  • DP
  • 前缀和优化
题意

题意有点难懂。翻译来自另一位大佬的博客

n ∗ m n*m nm的矩阵,每个格子不是黑的就是白的,要求满足下面条件的染色方案数:

1.存在区间 [ l , r ] ( 1 ≤ l ≤ r ≤ n ) [l,r](1 \leq l \leq r \leq n) [l,r](1lrn)满足,第 l l l行到第 r r r行每行恰两个黑色格子,其他行全部都是白色格子

2.存在 t ( l ≤ t ≤ r ) t(l \leq t \leq r) t(ltr)满足,对于任意 i , j ( l ≤ i ≤ j ≤ t ) i,j(l \leq i \leq j \leq t) i,j(lijt),第 i i i行两个黑色格子所在行形成的区间被第 j j j行两个黑色格子所在行形成区间包括,同样的,对于任意 i , j ( t ≤ i ≤ j ≤ r ) i,j(t \leq i \leq j \leq r) i,j(tijr),第 j j j行两个黑色格子所在行形成的区间被第 i i i行两个黑色格子所在行形成区间包括

思路

首先 f [ i ] [ j ] f[i][j] f[i][j]表示有 i i i行,第 i i i行区间长度 j j j的方案数。那么

f [ i ] [ j ] = 1 + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ ( j − k + 1 ) f[i][j]=1+\sum_{k=2}^{j}f[i-1][k]*(j-k+1) f[i][j]=1+k=2jf[i1][k](jk+1)

O ( n 3 ) O(n^3) O(n3)?可以拆成两部分。

f [ i ] [ j ] = 1 + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ j + ∑ k = 2 j f [ i − 1 ] [ k ] ∗ ( 1 − k ) f[i][j]=1+\sum_{k=2}^{j}f[i-1][k]*j+\sum_{k=2}^{j}f[i-1][k]*(1-k) f[i][j]=1+k=2jf[i1][k]j+k=2jf[i1][k](1k)

预处理前缀和 f [ i ] [ j ] f[i][j] f[i][j] g [ i ] [ j ] g[i][j] g[i][j],就变成 O ( n 2 ) O(n^2) O(n2)了。看似简单的优化却很好用。

g [ i ] [ j ] = ∑ k = 2 j f [ i ] [ k ] , h [ i ] [ j ] = ∑ k = 2 j f [ i ] [ k ] ∗ ( 1 − k ) g[i][j]=\sum_{k=2}^{j}f[i][k],h[i][j]=\sum_{k=2}^{j}f[i][k]*(1-k) g[i][j]=k=2jf[i][k],h[i][j]=k=2jf[i][k](1k)

E

key
  • 线段树
题意

求区间内所有点两两间的距离之和,支持修改。

思路

线段树维护三个东西,区间内点的数量,区间点权之和,区间所有点两两距离。

答案可以由左边距离和,右边距离,加上左右两部分之间作差得到。

值域 1 0 9 10^9 109,可以离散或者动态开点,显然后者更方便。

后记

于是很快就写完了,甚至怀疑为什么被 C C C题续到怀疑人生。最近几场CF也濒临掉分。一定要多练习。

想要代码可以去Status找 A m o r p h o p h a l l u s Amorphophallus Amorphophallus。跑的挺快的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值