首页 > 其他分享 >AT 板刷记录

AT 板刷记录

时间:2023-07-12 11:11:40浏览次数:31  
标签:mathbb ABC 记录 板刷 sum mid times dp

从 2022-08-25 开始更新。

\(\mathbb{ARC \ 146 \ C}\)

观察

一眼递推,问题在于 \(\Theta(2^n)\) 的复杂度显然不对。
考虑怎么从上一层转移,可以从现在新增的元素里选出一些往上一层合法的集合中加,如果在添加后不合法则情况是上一层的集合存在一个大小为奇数的子集异或值和当前选出的元素相等,继续想,这个子集只可能有一个,因为如果存在两个,则上一层的该集合不合法,即会存在一个大小为偶数且异或和为 \(0\) 的子集。
其实还可以发现一个性质,即是说因为上一层的集合每一个大小为奇数的集合都对应着一个唯一一个不能加进去的元素,那么每一新元素都有 \(2^i - 2^{i - 1}\) 种选法。
具体推一下,定义 \(dp_i\) 为第 \(i\) 层的答案,那么可以拿到 \(dp_{i - 1}\) 。
得到的转移方程为

\[dp_i = \frac{dp_{i - 1} \times (2^i - 2^{i - 1})}{i} \]

边界是 \(dp_1 = 1\) 。
回到最开始的问题,复杂度不对,其实打表可以看到在 \(i \ge n + 2\) 时,答案不会再次变化。

\(\mathbb{ABC \ 256 \ F}\)

/kk 因为这道题没看到弱智题 G

可以考虑一个最蠢的 \(dp_{t,i,j}\) 表示,前确定了 \(t\) 个维度后,距离 \(p\) 为 \(i\) ,距离 \(q\) 为 \(j\) 的多维体的总数,可以写出一个 \(\Theta(nD^3)\) 的转移方程。
然后比赛时就卡在这里了,,,

如果把代码写出来,估计优化就容易了。

for (int t = 1; t <= n; t++) {
    memset(dp[t & 1], 0, sizeof(dp));
    for (int pos = -2 * 1000; pos <= 2 * 1000; pos++) {

      int dis1 = Abs(pos - p[t]);
      int dis2 = Abs(pos - q[t]);
      if (Max(dis1, dis2) > d) continue;

      for (int i = 0; i <= d - dis1; i++) {
        for (int j = 0; j <= d - dis2; j++) {
          dp[t & 1][i + dis1][j + dis2] += dp[t & 1 ^ 1][i][j];
        }
      }

    }
  }

然后要搞一个奇妙的转化,定义 \(s_i = \mid p_i - q_i \mid\) ,把合法的 \((dis1,dis2)\) 分成三类。如下

\((s, 0), (s - 1, 1), (s - 2, 2), (s - 3, 3) \dots (0, s)\)

\((s + 1, 1), (s + 2, 2), (s + 3, 3) \dots\)

\((1, s + 1), (2, s + 2), (3, s + 3) \dots\)

那么这个就可以做了,因为这些合法的点均在一条直线上,最终可以优化到 \(\Theta(nd^2)\)。

\(\mathbb{ABC \ 264 \ G}\)

居然不会写了

标签:mathbb,ABC,记录,板刷,sum,mid,times,dp
From: https://www.cnblogs.com/Iridescent41/p/17546996.html

相关文章

  • 学习记录
    7/10 吴恩达机器学习p1~p7ComputerVision 1.1、1..2 7/11吴恩达机器学习p8~p12ComputerVision1.3、2.1、2.2配置jupyterbook环境......
  • 记录
    药:spring三级缓存源码循环依赖深入了解 怎么解决的循环依赖问题 JVM项目启动的参数使用的垃圾回收器CMS参数多调优好了更好;为什么不用parnew,G1也可以选择一些场景耗内存更多一点 JUC常用工具类具体掌握synchronzed和cutdownlunch轻量级重量级的区别公平非......
  • 针对记录的SQL语句
    查看表中的数据1.select*from表名;#查看表中所有数据2.select字段名,字段名from表名;#查看表中具体字段的数据增加数据insertinto表名values(数据);增加单条数据insertinto表名values(数据),(数据);#增加单条数据修改数据update表名set字段名=‘字段值’where......
  • 记录--盘点前端实现文件下载的几种方式
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前端涉及到的文件下载还是很多应用场景的,那么前端文件下载有多少种方式呢?每种方式有什么优缺点呢?下面就来一一介绍。1.使用a标签下载通过a标签的download属性来实现文件下载,这种方式是最简单的,也是我们比较常用......
  • git 合并某个分支上某次commit记录到另外一个分支
    需求:需要将A分支的某次提交记录,合并到B分支 解决步骤:1)gitcheckoutA分支找到提交的commitid可以使用gitlog命令或者右键上次提交的记录copyreversionnumber2)切回到B分支使用gitcherry-pick提交记录ID,回车即可。或者直接用idea选择某个commit,右键......
  • spark 的踩坑记录(二)spark 字符串截取问题
     前言接之前的spark踩坑记录,回想起当时折磨很久的一个问题,结果导致开发中花了很长时间才完全解决。主要原因为spark和java的字符串截取函数不一致导致的。主要技术框架背景介绍spark:2.4.3scala:2.11.12背景实际工作中会处理很多文本数据流,例如文章信息,评论信息等,调......
  • django 中 设置一个logging,来记录日志
    当你使用Django框架开发应用程序时,配置日志是一个重要的任务。以下是一步一步配置Django日志的示例:第1步:在你的Django项目中创建一个名为"logs"的文件夹,用于存储日志文件。第2步:在项目的根目录下的settings.py文件中,找到`LOGGING`配置项。如果该配置项不存在,请添加以下内容:```p......
  • 针对表的SQL语句、针对记录的SQL语句、存储引擎、数据类型、创建表的完成语法
    针对表的SQL语句有表的前提是先有库什么是表?表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段selectdatabase();查看当前所在库use  库名;使用库1.查看表showtables;查看那所有表showcreatetable t......
  • 微信小程序获取页面数据的几种方式记录
    获取页面数据有以下几种方式:使用data属性:在页面的data属性中定义数据,在页面的生命周期函数或其他函数中可以直接通过this.data来获取数据。使用setData方法:通过setData方法可以更新页面的数据,可以在页面的生命周期函数或其他函数中调用setData方法来更新数据。使用事件绑定:可以在wx......
  • 腾讯会议SDK调用记录
    腾讯会议SDK腾讯会议SDK是为合作方开发者提供的一组开发工具包,旨在帮助合作伙伴接入和访问腾讯会议资源和服务。通过二次开发,合作伙伴可以将腾讯会议SDK集成到企业内部的办公应用系统中,从而实现与腾讯会议的互联互通。 腾讯会议SDK已支持包括Mac、Windows、iOS、Android等主流......