ZROI 部分题目题解
ZROI 部分题目题解
335
首先发现一个性质:
对于最短的边而言,所有点的路径如果经过了这条边,那么路径的权值就是这条边的边权(废话)
那么我们把最短的边拎出来,可以发现,博物馆确定时,每个点按照路标所指方向走一定会经过最短的边或者一定被最短的边的某个端点经过
简单的说,令某一条最短的边的某个端点出发的某一条路径组成的集合为 \(S\),每个点出发的路径,要么包含某一条最短的边,要么被 \(S\) 中的某一条边包含
我们把每条边的权值减去 \(w\),其中 \(w\) 表示最短边的长度
那么题目转化为最小化一条链的权值和,这条链满足终点是博物馆,起点是某条最短边(也就是现在边权为零的某条边)的某个端点,并且这条链不经过零边
如何最小化一条链的权值和?我们考虑从某条最短边的某个端点开始在链上走,假如经过三条边 \(a,b,c\),满足权值 \(w_b \gt w_c\),那么可以发现,设 \(a=(u,v),b=(v,x)\) ,我们选取 \((u,x)\) 代替 \(a,b\) 一定不会更差,所以这条链上的边权基本是递增的
所以说这个链的权值基本上就是每条边的权值和
但是存在一个问题,就是 \(a\) 不存在的时候,也就是第一、二条边,这个并不能保证顺序,所以我们给每个点订一个初值,
(当时就写到上面那里,然后就忘了写了。。。)
503
首先把 \(\frac{(A_i - A_j) B_i B_j}{2A_iA_j}\) 化简,令 $C_i = \frac {B_i} {A_i} $,那么就有 \(\frac{(A_i - A_j) B_i B_j}{2A_iA_j} =\frac 1 2 (B_iC_j - B_jC_i)\)
发现右边那个东西是叉积,等价于把 \((B_i, C_i) ,(B_j, C_j)\) 放在平面直角坐标系里,这两个点与原点组成的三角形的有向面积
那么题目变成求一个上凸壳 + 一个下凸壳
单调队列维护一下即可
504
设最优解为 \((l_1, r_1, x_1), (l_2, r_2, x_2) \dots(l_k, r_k, x_k)\) 表示把 \(l_1\) 到 \(r_1\) 加上 \(x_1\),\(l_2\) 到 \(r_2\) 加上 \(x_2\),……
那么不难发现 \(l_i\) 互不相同,因为可以将 \((l,r_1,x_1)\) 和 \((l, r_2, x_2)\) 变成 \((l, r_1, x_1 + x_2)\) 和 \((r_1+1, r_2, x_2 - x_1)\) (这里假设 \(r_2 \geq r_1\))
首先发现区间不好做,我们通过差分把区间加变成单点加
首先令 \(a_i\) 表示第 \(i\) 个元素距离 \(7\) 的倍数差多少,然后把 \(a\) 差分一下
现在问题变成了求最少的操作数,每次操作是选一个位置 \(+x\),另一个位置 \(-x\) (可以不选)
注意这里没有顺序要求,完全可以在后面的一个位置上 \(+x\),在前面的一个位置上 \(-x\)
而且 \(-x\) 等价于 \(+(7-x)\)
所以可以先贪心地将 \(x\) 和 \(7 - x\) 进行匹配,因为一次操作只影响两个位置,最优的操作也只能消去两个位置,所以贪心没有问题
现在变成了一堆数,这堆数最多有三种,1和6中有一种,2和5中有一种,3和4中有一种,每次操作取出一个数,然后把任意另一个数减去这个数,直到所有数都为0为止,问最小操作次数
发现答案最劣为数的个数,那么和数的个数差多少呢?就是某些数可以被其他的数之和给消掉,也就是说,每一组数,这组数的和为 \(7\) 的倍数,就可以让答案减去1,所以我们变成了把这堆数分组,看最多能分出多少和为 \(7\) 的倍数的组
显然这种组里面每个数出现次数不会超过 \(6\),否则一定能拆成两个组(废话),而最多有三种数,所以可以 \(7^3\) 预处理所有组,然后令 \(f[i][j][k]\) 表示三种数分别有 \(i,j,k\) 个的时候的答案,\(dp\) 一下即可,复杂度看似 \(O(n^3 \times 组数)\) 过不去,实际上由于 \(i + j + k <= n\) 并且 \(i,j,k\) 的和是已经消去一些数之后的答案,而且因为每一组的和必须是 \(7\) 的倍数,所以组数和 \(7^3\) 差距甚远,一般只有几十,所以常数实际上非常小(极限数据大概跑0.6s)
505
分块暴力大法好!
因为修改对某一组的询问的影响显然可以 \(O(1)\) 计算,所以可以分块暴力
就是令块大小为 \(m\),然后每修改块大小次的时候就 \(O(20 n)\) 暴力重构,询问的时候就用答案加上每一次修改对其的影响,复杂度 \(O(\frac {20n^2} {m} + nm)\),由均值不等式,取 \(m = \sqrt {20n} = 1414\) 时,可以做到 \(1e8\),而且常数几乎为 \(1\)
正解是树状数组维护系数?没搞懂。。。
ZROI 部分题目题解的更多相关文章
- ZROI WC Round1 题解
ZROI WC Round1 题解 Problem A 题意 一个 \(n \times m\) 格子图,一个人从左上角出发,每次向右或者向下走一格,方法如下: 如果他在最下面一排,那么他会往右行走. ...
- ZROI WC Round5 题解
ZROI WC Round5 题解 Problem A 题意 给定一个长度为 \(n\) 的序列,操作是交换两个相邻的数,要求将序列变成先单调不降再单调不升,求最小操作数,注意可以完全单调不降或者完全 ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- chd校内选拔赛题目+题解
题目链接 A. Currency System in Geraldion 有1时,所有大于等于1的数都可由1组成.没有1时,最小不幸的数就是1. #include<iostream> ...
- Tarjan & LCA 套题题目题解
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...
- LuoguB2001 入门测试题目 题解
Update \(\texttt{2021.7.3}\) 经测试,本题 \(a,b\) 范围在 long long,对代码进行了修改,并修改一些笔误,更新了数据范围. \(\texttt{2021.7 ...
- cogs 自己出的题目 题解报告
第一题很简单嘛,就是裸的动态树分治嘛 对于每一层的重心维护子树路径的信息和子树到上一层重心的点的信息 空间复杂度O(nlogn) 对于每一层我们按dis排序,之后记录军队数量的前缀和 查询的时候我们只 ...
- Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ...
- 【qboi冲刺NOIP2017复赛试题4】 全套题目+题解+程序
作为一个好人(验题人),我给大家奉上下这套题的题解,并且预祝大家这套题能够AK: T1题面:Alice现在有n根木棍,他们长度为1,2,3....n,Bob想把某一些木棍去掉,使得Alice剩下的木棍 ...
随机推荐
- buntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发【转】
本文转载自:http://www.cnblogs.com/iamhenanese/p/5491862.html 安装JDK 从oracle官网下最新版的linux64位的jdk包(现在最新为jdk-8 ...
- HDU5968 异或密码 —— 二分 + 边界的细节处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5968 异或密码 Time Limit: 2000/1000 MS (Java/Others) M ...
- 花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不吐不快
http://www.cnweblog.com/fly2700/archive/2011/12/06/318916.html (转载) 花了5天时间,终于解决了一个bug,心情非常愉快,憋了这么久,不 ...
- hdu-5621 KK's Point(dp+数学)
题目链接: KK's Point Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 「LuoguP3379」 【模板】最近公共祖先(LCA)
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- [ZJOI 2007] 捉迷藏
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1095 [算法] 首先建出点分树,然后每一个点开两个堆.“第一个堆记录子树中所有节点到 ...
- mybatis编写流程(老版本的方式,新版本用接口式编程)
1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息2.sql映射文件:配置了每一个sql,以及sql的封装规则等. 3.将sql映射文件注 ...
- 解决Exception:Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
原因是配置文件中 <bean id="transactionManager" class="org.springframework.orm.hibernate4.H ...
- python2代码批量转为python3代码
由于python存在python2和python3两个主要的版本方向,经常会有将python2的代码转到python3的环境下运行的需求.尤其是跑一些神经网络的代码时有很多是在python2的环境下写 ...
- 1.Win7中判断当前端口是否被占用
以Win7为例,可以用如下方法找出某个端口是否被其他进程占用:netstat -aon|findstr "8081" 发现8081端口被PID为5900的进程占用, tasklis ...