2021.09.15pm

|---|预期|实际|
|---|---|——--|
|A|100|100|
|B|100|20|
|C|100|100|
|D|100|30|
|E|10|10|
|S|410|260|

可能水,一定菜

A 相遇问题 \(\blacktriangle\)

  1. 这道题我写过题解了,押题成功here

B 龙&虫 \(\blacktriangle\!\blacktriangledown\)

  1. 一年前写对了,一年不如一年
  2. 其实就只是一些离谱的小问题(类似代码模块粘贴没修改完,以及虫和人方向整反了)
  3. 这道题数据范围给的十分特殊:\(N*M \le 20000\) (但实际最大只有\(128*128\)),解决方法:
    • \(vector\) 但这玩意效率低,容易\(RE\), 还容易 \(MLE\)
    • 所以考虑把矩阵压成一行,把每一行拼一起就行(其实\(C++\) 的二维数组就是这样开的连续空间)
  4. 对于打得到敌人的判定,我觉得之前的方法反而更好,甚至对现在的我都有启发作用
    • 先是今天的方法:每到一个位置,看敌人是否在他八个方向之一,在查找自己与他的路径上是否有墙
    • 再是之前的方法:预处理所有能打到敌人的地方,判断虫是否能到达。这样时间复杂度能从\(O(nm*(n+m))\) 优化到 \(O(nm)\),而且代码也更容易实现,出错可能性更低。
    • 现在很多题都有点不求甚解,复杂度能过就行,这样一道题的价值是没有利用完全的,要继续尝试优化改进。

C 有重复元素的排列问题 \(\blacktriangle\)

  1. 绝对是数据特别水,我旁边的机子试了一下 \(497*a+3*b\) 跑了一个多小时,长度接近\(10G\)
  2. 这道题硬搜都能过,但我们还是考虑一下优化当然也可以用康托展开
    • \(sort\) (这个不加也没法字典序)
    • 树状数组+分治 \(O(\log n)\) 修改及查找空位(这个考场谁会写啊,过会补过来)
    • \(nx\) 标记预处理 \(O(n)\)\(O(1)\) 找到下一个字符
  3. 现在补过来了。已经放弃进行此项修改。时间从\(112ms\) 增加到 \(228ms\) 我觉得不是树状数组分治算法带来新的复杂度(但常数有点大),应该是数据太水导致常数被放大化(

D 警察找车 \(\blacktriangle\!\blacktriangledown\)

  1. 笑死,语句拖出来忘记把 \(break\) 改成 \(continue\)
  2. 稍微沾点模拟。
  3. 注意事项:
    • 必须前进,不能原地打转
    • 可以回到之前走到过得地方
    • 同一轮扩展要给到的点打上标记,不然重复访问数组存不下要炸掉。(编数据调试出来的)

E 勇士

  1. 符合题意,勇士才会去做

image
\(\cal {Made} \ {by} \ {YuGe}\)

posted @ 2021-09-15 19:54  u2003  阅读(22)  评论(0)    收藏  举报