题解

传送门

你有 \(n\) 个灯泡,一开始都未点亮。

同时你有 \(l\) 个长度,分别为 \(a_1 \sim a_l\)。

每次你可以选择一段连续的子序列,且长度为某个 \(a_i\),并将这些灯泡的明灭状态取反。

求最少的操作次数,使得最后有且仅有 \(k\) 个位置是亮的,这些位置已经给定,为 \(x_1 \sim x_k\)。

\(1 \le n \le 10^4,1\le l \le 10^2,1\le k\le 10\)。

题解

看到 \(k\) 的范围,考虑状压。但思考了一会没有什么头绪。于是开始寻找充要条件。

发现难点在于区间翻转。一个常见的技巧是差分。于是将原序列变成其异或差分序列,即 \(a_i=a_i \oplus a_{i+1}\)。易证差分序列与原序列是一一对应的。

此时操作变成了将两个距离一定的位置单点翻转。此时状压已经初见眉目了:如果翻转两个 \(0\),就可以变成更大的状态。但如果是其他情况呢?

如果翻转 \(1\) 和 \(0\),会导致最终状态应该是 \(1\) 的点出现 \(0\)。那么其最后肯定是要翻回来的。因为翻转的顺序不影响结果,我们可以先考虑“翻回来”的操作。于是可以发现,操作构成一条路径。因为最后一定落在最终状态为 \(0\) 的点上,故做一下最短路后就可以解决。

如果翻转两个 \(1\),显然没有意义。

于是此题解决。

CF79D 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. VUE学习-优化过渡

    过渡(优化) 可复用的过渡 <transition> 或者 <transition-group>为根的组件 Vue.component('my-special-transiti ...

  2. 使用svg让页面自适应浏览器大小,整体等比缩放

    网页代码: <!DOCTYPE html> <html> <head> <style> body { margin:0; padding:0; widt ...

  3. 2022-04-26内部群每日三题-清辉PMP

    1.一家组织的经验教训数据库表明过去的重大项目问题是质量失败.项目经理在制定质量管理过程时决定做得更彻底.为确保质量,项目经理应该怎么做? A.根据项目的范围和需求制定质量管理计划. B.将所有质量控 ...

  4. Mybatis 中传入List实现 批量插入、批量更新、批量删除

    1. 批量插入: Mapper层: int insertList(List<UsersModel> list); 对应的mapper.xml: <!--批量插入信息--> &l ...

  5. 钉钉获取群openConversationId方式以及企业内部机器人发送群消息

    https://open-dev.dingtalk.com/apiExplorer#/jsapi?api=biz.chat.chooseConversationByCorpId 通过上述URL进入钉钉 ...

  6. golang json 字符串 用 json.Number 解析字段

    不定义结构体,用map 解析json 字符串字段 func main() { jsonString := `{"age": 20, "height": 180 ...

  7. UML 组成 1

    常用关系: 关联关系使用一条直线表示,比如  A与B关联 用于描述不同类的对象之间的结构关系,将多个类的实例联系在一起 是一种静态关系,基本与程序的运行没有关系 比如,部门与员工的关系,就是关联关系 ...

  8. LambdaQueryWrapper 的条件构造器方法对应Sql

    setSqlSelect SELECT 查询字段 where WHERE 语句,拼接 + WHERE 条件 and AND 语句,拼接 + AND 字段=值 andNew AND 语句,拼接 + AN ...

  9. Linux网络第六章:PXE高效批量网络装机及kickstart无人值守安装

    目录 一.PXE基础知识 二.PXE使用服务 三.高效批量网络装机实操 1.环境准备 2.配置dhcpd服务 3.配置FTP服务 4.配置TFTP服务 5.配置kickstart无人值守 6.启动服务 ...

  10. Laravel ORM 常用方法

    1. 数据查询 ->find($id);  //需要一个主键$id并返回一个模型对象.若不存在则返回null ->findOrFail($id);  //需要一个主键$id并返回一个模型对 ...