长沙一中集训~夏~Notes(Day 3)

Day 3

在被昨天晚上的莫比乌斯反演刷新了世界观后,今天的咱做好了爆零的万全准备

然后果然就爆零了【趴 咱还是乖乖地抄题解吧

T1 Matrix

可能这两天DP题见太多了现在看啥都像DP了233333读完题的第一反应觉得可以选取n行,令m为这若干行的并中最长的连续的1的个数,使得n*m,然后对这个东西套上DP就……挂掉了。仔细一想这破玩意似乎是有后效性的,转移也是十分难做,于是这题就愉快地爆零了,咱甚至连部分分都拿不到wsl

下午看完题解和czh dalao的思路之后弄出了个很奇怪的算法。我们用扫描线扫过每个可能的右端点并将其固定,寻找所有可能的左端点并求最大值即可。

那么,我们如何知道对于每个左端点,有多少个连续的1呢?我们知道如果固定了右端点,那么只有当一段1从我们确定右端点的左侧连续的到右侧,这段1才能被计算。那么,我们可以将每行连续的1扒下来变成区间,然后按左端点和右端点为关键字分别排一次序。如果我们的扫描线碰到了一个区间的左端点,那么把它加入树状数组,如果碰到了右端点则将其从树状数组中减掉即可。

T2 Present

NOIP 2018 Day 1 T2 货币系统

显然这题是个完全装满背包,然而这个数据范围告诉我们这道题并不简单。写背包的话时间复杂度为O(na_{max}),在这题的数据范围下是一定要T的,并且用上背包还要顶着巨大的空间复杂度,这意味着我们需要寻找更加可行的方法。

我们注意到,假设所有物品中体积最小为p_{min},那么如果有一件物品的件数超过p_{min},我们就可以用p_{min}对应的物品取代原来的那个物品,这样我们就可以先用p_{min}尽可能填充背包,剩余部分再去DP,这样可以大大缩小DP的范围。

然而事实上我们完全不需要DP。考虑用若干件物品组成a,使得a \equiv a_i \pmod{p_{min}},如果a \leq a_{i},那么我们一定可以用p_{min}aa_{i}小的部分补齐,这样就能够组成a_{i}

因此,我们只需要找最小的a \equiv a_i \pmod{p_{min}},判断a是否不大于a_{i}即可。我们可以将其看做一个最短路,其中s(s + p_{i}) \mod {p_{min}}连边,边权为p_{i},跑SPFA即可。

T3 Mahjong

@xbz

教练,我想打雀魂

其实就是一个大模拟。我们枚举所有牌并检查是否可以听该张牌即可。七对子和国士无双可以直接判掉,然后我们找一个雀头并检查是否有4个面子即可。不过注意等效的情况不应重复判断,否则会导致T的非常惨。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇