原文链接https://www.cnblogs.com/cly-none/p/9697662.html

题目当然不会做完了,这里只讲有做&会做的。

A. Last chance

题意:有\(n\)个敌方飞船,己方有\(m\)个武器,有以下三种类型:

  • 能攻击编号属于一个大小为\(k_i\)的集合的所有飞船。
  • 能攻击编号在\([l_i,r_i]\)区间内的所有飞船。
  • 能攻击三个飞船,编号分别为\(a_i,b_i,c_i\)。

其中,前两种类型的武器每个只能攻击\(1\)个飞船,第三种每个只能使用\(0\)次或\(2\)次。

特别性质:每个飞船最多会被一个第三种武器纳入攻击范围。

在每个飞船只能被攻击一次的情况下,问最多能攻击到多少个飞船,并输出方案。

\(n,m \leq 5000, \, \sum{k_i} \leq 10^5\)

容易想到,本题是个最大流。

那么,第一种武器可以暴力连边,第二种武器可以线段树优化建图,问题就在于第三种武器,只能使用\(0\)次或\(2\)次。

接下来当然要考虑特殊性质。考虑每个被同一个第三种武器锁定的三元组,它们其中只要有一个被前两种武器攻击,就可以全部被攻击;否则也能有两个被攻击。换言之,不考虑第三种武器,每个三元组最多被攻击一次。因此,我们每个三元组建一个辅助点让它们的流量和小于等于\(1\),就相当于是把第三种武器处理掉了。统计答案时再加上第三种武器的贡献就可以了。

那么,点数、边数就是\(O(n \log n)\)的了。

最后输出方案,一个好写的方法是类似于找增广路,把已有的流量一条条退回去就好了。

B. Space Isaac

在模\(m\)的意义下,给出一个大小为\(n\)的集合\(A\)。询问任取两个元素,一个在这个集合里,一个不在,相加所不能得到的数有那些。

\(n \leq 2 \times 10^5, \, m \leq 10^9\)

考虑一个数\(x\)如果不能得到,那么对于所有\(y \in A\),一定有\(x - y \in A\)。那么,我们把所有数按0/1表示它在不在集合\(A\)中,得到的一个0/1无限序列一定关于\(x\)对称。当然,对称只用看\(m\)位就可以了。因此,我们枚举这\(m\)位最左端的\(1\)是\(A\)中的哪一个元素,最右端的\(1\)也就确定了,然后用字符串哈希判断字符串是否回文就好了。

时间复杂度\(O(n)\)。

H. Self-exploration

求在\([l,r]\)区间内有多少数满足在二进制下:

  • 子串\(00\)的个数为\(C_{00}\)。
  • 子串\(01\)的个数为\(C_{01}\)。
  • 子串\(10\)的个数为\(C_{10}\)。
  • 子串\(11\)的个数为\(C_{11}\)。

答案对\(10^9 + 7\)取模。

\(l,r \leq 2^{10^5}\)

首先,我们容易得到所有满足条件的数二进制下的长度。

考虑没有\([l,r]\)的限制的情况。整个0/1序列就是很多段连续全0或全1的序列,而通过\(C_{01},C_{10}\)这两个常数,我们可以计算得到,全0的序列有多少个,全1的序列又有多少个。然后,我们也能得到一共有多少个0和1。于是问题就变成了把若干个1分到若干个全1序列中,若干个0分到若干个全0序列中,这可以用插板法来求。

而存在\([l,r]\)的限制的情况下,我们先把限制转化为\([0,r)\)的类型,然后枚举前面有多少位是相同的。也就是说,我们计算的二进制数小于\(r\)的情况下,它们不同的最高一位,一定是在\(r\)为\(1\)的位置上填了\(0\)。之后就可以忽略\(r\)的限制了。因此,我们枚举最高的不同的一位就好了。

时间复杂度\(O(\log r)\)。

小结:这三道题都是可以自己想出来的,但在比赛时还是被BH卡住了。实际上B题对答案有分析就好了,H题在于不能粗暴往数位dp的方向去想。

【做题】CF1045(ABH)的更多相关文章

  1. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  2. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  3. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  4. 屏蔽Codeforces做题时的Problem tags提示

    当在Codeforces上做题的时,有时会无意撇到右侧的Problem tags边栏,但是原本并不希望能够看到它. 能否把它屏蔽了呢?答案是显然的,我们只需要加一段很短的CSS即可. span.tag ...

  5. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

  6. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  7. CodeM美团点评编程大赛复赛 做题感悟&题解

    [T1] [简要题意]   长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...

  8. (luogu1704)寻找最优美做题曲线 [TPLY]

    寻找最优美做题曲线 题目链接:https://www.luogu.org/problemnew/show/P1704 题目大意: 求包含指定点的最长不降子序列(严格递增) 题解 首先我们发现 一个序列 ...

  9. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  10. bzoj5108: [CodePlus2017]可做题

    Description qmqmqm希望给sublinekelzrip出一道可做题.于是他想到了这么一道题目:给一个长度为n的非负整数序列ai,你需 要计算其异或前缀和bi,满足条件b1=a1,bi= ...

随机推荐

  1. 设计模式之Facade(外观)(转)

    Facade的定义: 为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connec ...

  2. createDocumentFragment()用法总结

    1.createDocumentFragment()方法,是用来创建一个虚拟的节点对象,或者说,是用来创建文档碎片节点.它可以包含各种类型的节点,在创建之初是空的. 2.DocumentFragmen ...

  3. How to install john deere service advisor 4.2.005 on win 10 64bit

    How to install john deere service advisor 4.2.005 with the February 2016 data base disks on a machin ...

  4. Ford VCM II Ford VCM2 Diagnostic Tool with Ford IDS v108 Installed On Laptop Ready to Use

    HOW to VCM2 Ford VCM II with Ford IDS v108 Work Well? VCM2 Ford VCM2 Ford diagnostic tool hot sale i ...

  5. unittest和pytest的区别

    一.用例编写规则 1.unittest提供了test cases.test suites.test fixtures.test runner相关的类,让测试更加明确.方便.可控.使用unittest编 ...

  6. Hadoop学习笔记之二:NameNode

    NameNode对三大协议接口(NamenodeProtocol.ClientProtoco.DatanodeProtocol)进行实现,利用ipc::Server通过三个协议分别向SNN.Clien ...

  7. Django框架----跨表查询及添加记录

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  8. 【视频】使用fiddler开发工具进行新架构页面本地调试

    [视频]使用fiddler开发工具进行新架构页面本地调试,视频没录制好,有些部分比较模糊...

  9. P3203 [HNOI2010]弹飞绵羊(LCT)

    P3203 [HNOI2010]弹飞绵羊 LCT板子 用一个$p[i]$数组维护每个点指向的下个点. 每次修改时cut*1+link*1就解决了 被弹出界时新设一个点,权为0,作为终点表示出界点.其他 ...

  10. keepalived与zookeeper

    keepalived与zookeeper都可以用来实现高可用,高可用一般跟负载均衡会一起考虑,所以通常也会考虑到相应的负载均衡能力, 1.概括对比: 1.1.Keepalived: 优点:简单,基本不 ...