JXOI2018做题笔记
发现自己不会T3可以退群了
排序问题(组合、模拟)
可以发现Gobo Sort相当于在所有排列中随机选择一个,所以当第\(i\)个数出现次数为\(a_i\)时,期望的Sort次数就是\(\frac{(n+m)!}{\prod\limits_{i=1}^{10^9} a_i!}\)。
我们希望Sort次数尽可能大,也就是能够让\([L,R]\)内的\(a_i\)尽可能平均。我们把所有\(a_i \neq 0 , i \in [L,R]\)的所有\(a_i\)扔进小根堆,每一次pop堆顶考虑其余的所有数是否能够加到当前堆顶的\(a_i\)的个数,如果不能就把剩下的平摊。
代码
游戏(线性筛、组合)
实际会对最后答案产生影响的数\(x\)一定会满足\([l,r]\)内不存在比\(x\)小的\(x\)的因子。
所以通过线性筛先求出所有数的最小质因子,就可以求出所有会对答案产生影响的数,那么现在就是要求求出这些数中最后一个出现的数的出现位置的总和。
考虑枚举最后一个数出现的位置\(x\),那么\([x+1,len]\)里全部都是不产生影响的数,那么我们可以先选定后面\(y\)个数是不产生影响的数、前面乱排,减去后面\(y+1\)个数是不产生影响的数的方案数,就是从后往前第\(y+1\)个数是最后一个对答案产生影响的数的方案数。
代码
守卫(DP)
不会做qwq
考虑:对于一个区间\([l,r]\),\(r\)位置一定会放一个保镖,把\(r\)所能够看到的所有位置删掉之后又会形成若干个区间,这些区间的右端点和右端点右边的点中一定要放一个保镖,这就变成了一个子问题。
所以可以考虑DP。设\(f_{i,j}\)表示区间\([i,j]\)的答案,转移先把所有\(j\)能看到的点拿出来,假设形成了区间\([l_1,r_1],[l_2,r_2],...,[l_k,r_k]\),那么转移就是\(f_{i,j} = 1 + \sum\limits_{i=0}^k \min(f_{l_i,r_i} , f_{l_i,r_i+1})\)。
这样转移是三方的不够优秀,但是注意到对于区间\([i,j]\)的不能看到的区间一定是区间\([l,j](l<i)\)的看不到的区间的子集,所以可以先固定右端点扫左端点,对于已经形成的不能看见的区间直接将答案贡献进去,这样复杂度就降为\(O(n^2)\)。
代码
转载于:https://www.cnblogs.com/Itst/p/10992647.html
JXOI2018做题笔记相关推荐
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- verilog练习:hdlbits网站上的做题笔记(6)
前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...
- verilog练习:hdlbits网站上的做题笔记(5)
前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...
- verilog练习:hdlbits网站上的做题笔记(7)!强烈推荐!
前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...
- verilog练习:hdlbits网站上的做题笔记(8)
前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...
- buuctf-MISC篇做题笔记(2)
buuctf-MISC篇做题笔记(2) 第七题:基础破解 先看题目提示,可能也要暴力破解 打开后是RAR文件,需要密码 我是用RARpassword暴力破解,且根据题意已知是四位纯数字密码,设置破解的 ...
- 关于数据库设计的做题笔记——选择题+填空题+大题
✅ 一点整理后的做题笔记- 文章目录 一.选择题和填空题 二.大题 三.写后感 ● 我们用的教材: 一.选择题和填空题 逻辑设计阶段的任务包括设计视图,形成数据库的外模式.( ) A. 对 B. 错 ...
- CS231n_1_assignment1_KNN做题笔记
笔记 KNN部分 1.python中一个向量,每个元素平方后求和: 方法1 sum = 0 for item in vector:sum += item*item 方法2 summ = numpy.s ...
- 攻防世界ctf题目easyupload做题笔记。
刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固.做了半天没有解出来,最后还是看别人的题解做出来的.写下做题过程,也就是wp吧.为了方便以后复习巩固. 本题的主要考点为利用 ...
最新文章
- hadoop的mapReduce历史服务配置及查看
- C语言中的union
- 理工科毕业设计献礼,MATLAB从入门到精通之矩阵是如何实现寻访与赋值的
- 重磅发布|网易云信质量数据监控台对外开放
- 前端学习(392):京东制作页面1京东项目项目介绍
- BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
- AndroidStudio_安卓原生开发_v4v7升级到androidx方法---Android原生开发工作笔记147
- 几何元素网页设计的力量,让人眼前一亮
- 2018百度之星程序设计大赛-资格赛P1002子串查询(前缀和)
- CSDN社区排名出炉了,来看看你的排名是多少?
- 安徽 gis epsg
- 依图三变,“退群”AI四小龙
- 贪心算法3: 会议安排
- 计算机网络中数据传输速率的单位是什么,计算机网络中传输介质传输速率的单位是用什么表示...
- 数据库原理 | 第1章 概述
- Linux安装软件提示MD5不同,如何在Debian/Ubuntu Linux中校验已安装软件包的MD5和?
- nvm 卸载详细流程
- 教你免费将手机里的PDF转Word还能同步到电脑
- 使用Arduino开发ESP32:关于esp32 wifi连接不上的解决办法
- linux 之top命令详解