[整理]qbxt集训10场考试 大 杂 烩 (前篇)
Contest 1
A
计算 \(n!\mod 2^{32}\) 。发现数一大答案就为 \(0\) ,直接输出即可。
B
一个 \(n\times m\) 的网格,网格中的数都在 \([1,nm]\) 之间且满足 \(A_{i,j}<A{i+1,j},A_{i,j}<A_{i,j+1}\) ,求对于任意 \(k\) ,有多少个格子可能填入 \(k\) 。
可以预处理出每个格子可填数的范围,然后差分。
C
对于一个排列有三种操作:花费 \(a\) 交换相邻两个数,花费 \(b\) 翻转整个排列,花费 \(c\) 打乱整个排列。问将其排好序的期望花费。
先通过状压处理出每个逆序对数量对应多少种排列,然后求一下每种排列不用打乱操作的花费,这时我们发现,如果使用打乱操作,一定是遇到了某个比较大的后缀,求出答案的前缀与后缀即可遍历找出最小值。
D
有 \(k\) 棵树,对于每对点 \(i,j\) 求出有多少个 \(x\) 在所有树中 \(i\) 到 \(j\) 的路径上。
先考虑一棵树,发现满足条件的点 \(x\) 满足 \(dis_{i,x}+dis_{x,j}=dis_{i,j}\) ,然后通过一番%^#@!%!#*%发现这个式子可以推广到多棵树上,于是就可以预处理距离数组 \(O(1)\) 判定了。
Contest 2
A
\(n\) 个元素划分成若干段,求每段异或和的加和的最值。根据异或的性质得出最小值是全异或起来,最大值是全加起来。
B
在约瑟夫游戏中,指针指到的人出局条件改为 \(p\) 的概率出局,求指针期望移动多少下。
可以设 \(f_n\) 表示 \(n\) 个人期望走几步,易得转移方程 \(f_i=pf_{i-1}+1+(1-p)f_i\) ,即 \(f_n=\frac 1p+f_{n-1}\) ,加起来可得答案 \(\frac np\) 。
C
实现区间加、区间整除、区间查询最大值和区间恢复初值四个操作。
树里可以存 \(\lfloor\frac{x+a}{b}\rfloor+c\) 三个标记,下传的时候可以优化一下整除,然后,正常线段树。
D
\(2n\) 个数平均分给 \(n\) 个人,求使得两数之和最大值唯一的方案数。
直接做不好求,考虑每个数作为最大值的贡献。
例如,在数列 \(\{1,2,3,4,5,6,7,8,9\}\) 中,假设最大值为 \(12=6\times2=5+7\) ,那么我们发现此时右边的只能和左边匹配(例如 \(9\) 能配 \(1,2\) , \(8\) 只能配 \(1,2,3\) 并且其中一个还被 \(9\) 占去了),这样下去直到右边匹配完,方案数是某个常数的幂。选完后左边剩下偶数个数,方案数其实是一个双阶乘。
Contest 3
A
每个物品有重量和价值,总重量为所有重量或起来的和,有一个容量为 \(k\) 的背包,求最大价值。
从最高位分类讨论即可。
B
求最长相邻按位与非零子序列。
直接dp不方便,可以按位dp。参见洛谷P4310 绝世好题。
C
有一些位数相同的十进制数,有些位置被抹去,求把空格填完后所有数单调递增的方案数(原题为数字和)。
可以dp来做:设 \(f_{i,l,r}\) 表示对于 \([l,r]\) 里的数字,第 \(i\) 列以后的方案数。这个状态不太好转移,于是再往里面套一个dp辅助计算,用 \(g_{j,k}\) 表示对于状态 \(i,l,r\) ,考虑完了前 \(j\) 行,当前最大填 \(k\) 的方案数。对于求数字和也是差不多的套路。
D
有一堆石子,每次从石子里取出一些形成另一堆(总共不超过 \(m\) 个),求最小分裂次数。
不好维护,考虑每个石子的状态。每次分裂可以看成给分出来的石子分配1的标号,反之为0,这样每个石子的状态就是一个01串,我们需要使它们不同。接下来发现答案满足单调性,于是二分一个 \(mid\) ,转化成判定是否合法。由题意得,如果合法,则 \(mid\times m\) 能够使得所有串两两不同且1的个数不超过 \(mid\times m\) 。如何证明它也是充分的呢?我们可以通过贪心构造来说明:每次把1往个数少的地方放,最终会变成从 \([1,n]\) 里取若干 \(m\) 元子集使得每个数被取的次数之间的极差 \(\le1\) 。如果不满足条件,则选一个出现太多的 \(i\) ,一个出现太少的 \(j\) ,发现一定有串能满足可以交换这两位,于是完事了。
Contest 4
A
模拟题。
B
有一些字符串,选择一个字符串并任意排序,然后重新定义字典序,使得其余所有字符串排序后都比自己的大,问有多少种选择。
首先可以枚举选择的字符串,然后枚举字典序,使得每个字符在这个字符串里出现均为最多,依次筛掉不合法的即可。
C
求所有逆序对不少于 \(K\) 个的区间交集大小之和。
我们先考虑如何求出这些区间。求出一个刚好满足要求的右端点,然后发现左端点右移,右端点一定右移,于是可以使用树状数组维护个数。答案不好求,按照惯例转化成求贡献,此时答案与覆盖某点的区间有关。经过一顿分析可以发现最终是要求区间加等差数列,用毒瘤数据结构维护。
D
有一棵树,你要从给定的两点进去,挨个节点炸掉它,炸掉的点不能通过,求炸掉所有点的方案数。
对于两点相同的情况,可以直接进行树形dp:设 \(f_i\) 为方案数,则 \(f_u=f_u\times f_{son}\times C_{size_u+size_{son}}^{size_{son}}\) 。若两点不同,则可以把树分成两点之间的部分和这两点的子树。发现两点中间的部分一定是从中间向两端删一个区间,于是可以区间dp,每扩展一个点就把它的子树乘进贡献。
Contest 5
A
有四种颜色的球,要求放成一列且相邻的球颜色不相同,求方案数。(前两种颜色球的数量远小于后两种)
可以把前两种和后两种分开考虑,先dp求出放完前两种之后相邻颜色一样的个数为 \(i\) 的方案数(记作 $f_i)。接下来枚举后两种颜色的放法以及形如343、434、34的数量,最后用排列组合计算出答案。
B
参见洛谷P2123 皇后游戏。
C
请你区间加、区间乘、区间赋值、查询所有区间平均数的和。
前三种操作好说,关键是最后一种。可以拆成每个点对答案的贡献来计算。
D
你可以在一棵树的叶子节点上放毒气,毒气以每秒一单位的速度蔓延,问有多少种不同的使毒气蔓延到整棵树的时间(时间是连续的,例如毒气可以在一条边的中间汇合)。
考虑两个叶子结点之间的时间,发现要么是从一个蔓延到另一个,要么是从两端同时蔓延。于是对于两种情况,分别求出放毒后没有影响的点,同时进行SPFA,看最终结果是否满足条件。
[整理]qbxt集训10场考试 大 杂 烩 (前篇)的更多相关文章
- [整理]qbxt集训10场考试 大 杂 烩 (后篇)
前篇 Contest 6 A 两个数,第 \(i\) 轮从较大数(如果相等就是第一个)里减去 \(i\) ,问操作不能进行时两数分别为多少. 首先把大数减到和小数差不多,然后我们会发现接下来两数会轮流 ...
- 你跟上技术趋势了么? 来看看这10场2017热门it技术会议!
2016年各类大会让人应接不暇,技术圈儿最不缺的就是各种大会小会,有的纯干货,有的纯广告.作为一名技术开发者,参加了几场大会,你是不是也开始思忖:究竟哪些会议才值得参加?下面活动家为你推荐几场2017 ...
- 2016 10 28考试 dp 乱搞 树状数组
2016 10 28 考试 时间 7:50 AM to 11:15 AM 下载链接: 试题 考试包 这次考试对自己的表现非常不满意!! T1看出来是dp题目,但是在考试过程中并没有推出转移方程,考虑了 ...
- 我的 2020:出书、办签售会、发展 VS Code 中文社区、成为开源先锋、全网 10 万粉丝、10 场演讲、内推 21 人、955.WLB 发扬光大
感觉写 2019 年终总结还是在不久之前.转眼间,2020 已经接近尾声了.是时候来写写 2020 年的年终总结了. 出书 今年最高兴的事情之一,就是出了全球首本 VS Code 中文书 -- < ...
- zw·10倍速大数据与全内存计算
zw·10倍速大数据与全内存计算 zw全内存10倍速计算blog,早就在博客园机器视觉栏目发过,大数据版的一直挂着,今天抽空补上. 在<零起点,python大数据与量化交易>目录中 htt ...
- JAVA Apache POI 之sax 解析10万级大数量数据
第一步让我们来看看我们的大量数据的excel 文件 好的下面第二步看一下代码: package com.chinait.utils; /** * 写这个东西主要是最近做了一个联通的数据迁移工作,他们就 ...
- 2019年终总结:10场演讲、内推20人、公众号2万粉丝、Code Runner 1000万下载
2019年是值得记录的一年,成长许多,也收获许多. 做了 10 场大会的技术演讲,成功内推 20 人拿到微软 Offer,知乎 Live 2000 听众,公众号 2 万粉丝,GitHub 2万 sta ...
- Unity3D大风暴之入门篇(海量教学视频版)
智画互动开发团队 编 ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...
- 阶乘之和 输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤10 6 ,n!表示 前n个正整数之积。
阶乘之和输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0).n≤10 6 ,n!表示前n个正整数之积.样例输入:10样例输出: package demo; import java.uti ...
随机推荐
- 基于Django的图书推荐系统和论坛
基于Django的图书推荐系统和论坛 关注公众号"轻松学编程"回复"图书系统"获取源码 一.基本功能 登录注册页面 基于协同过滤的图书的分类,排序,搜索,打分功 ...
- import tensorflow 出现非法指令(核心已转储)
使用 conda install -c conda-forge tensorflow 或者 conda install -c conda-forge tensorflow-gpu 试下.
- vim编辑器使用简介
使用格式 vim [option] /path/to/somefile ... option: -o水平分割 -O垂直分割 +打开后在最后一行 +Num打开后在地Num行,加号与Num之间不能有空格 ...
- OJ-2:区间问题【九度1554】
题目描述: 给定一个数组,判断数组内是否存在一个连续区间,使其和恰好等于给定整数k. 输入: 输入包含多组测试用例,每组测试用例由一个整数n(1<=n<=10000)开头,代表数组的大 ...
- C# 集合类(三)
C# 集合类自己经常用到: 数组(Array).动态数组(ArrayList).列表(List).哈希表(Hashtable).字典(Dictionary),对于经常使用的这些数据结构,做一个总结,便 ...
- c语言 :write与read系统调用总结
在学习的时候总是有点迷糊于是在网上找到一些比较好的分享一下 下面举一个例子: 1 #include <stdio.h> 2 #include <unistd.h> 3 #in ...
- string.contains()
public class test { public static void main(String[] args){ System.out.println("abcde".con ...
- 设计模式之工厂模式(Factory模式)
在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...
- Python_pycharm调试模式+使用pycharm给python传递参数
一.通过pycharm 给python传递函数 1. 在pycharm终端中写入要获取的参数,进行获取 1>启动pycharm 中Terminal(终端) 窗口 点击pycharm左下角的图标, ...
- Python_自动化测试_项目
<论坛自动化测试项目> 1.自行选择合适的社区 2.功能要求 5个以上,不包含登录页 3.多手动测试 多用selenium IDE 4.生成测试报告,发送邮件 5.计划任务定时完成 6 ...