[JZOJ2866] 【集训队互测 2012】Bomb】的更多相关文章

题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出所有集合 \(S=\{a_1,a_2,\cdots,a_n\}\) 的权值之和,然后答案乘上 \(n!\). 那么怎么求这个权值之和呢?首先有一个非常 naive 的 DP,\(dp_{i,j}\) 表示 \(1\sim i\) 中选了 \(j\) 个数,可得的集合的权值之和,那么显然有 \(dp_{i,j…
题目 题目大意 给你一个有\(n\)个点的平面. 选择三个点,求两两之间曼哈顿距离和的最大值和最小值. 思考历程&正解 比赛的时候没有想太多,但感觉似乎比较水-- 首先有个很显然的性质,答案为这三个点的最大最小横坐标之差和最大最小纵坐标之差的和. 可以把它看成矩形的周长,容易发现矩形至少一个顶点是三个点之一. 后来才发现水的是求最大值,而不是求最小值. 比赛之后开始和WMY刚-- 最大值是很好求的.我一开始打了个线段树来求,后来发现根本不用-- 求出所有点的\(Xmin,Xmax,Ymin,Ym…
题目 题目大意 平面上有一堆带权值的点.两种操作:交换两个点的权值,查找一个矩形的第\(k\)小 \(N<=60000\) \(M<=10000\) \(10000ms\) 思考历程&各种可能过的方法 先是想了一会儿,然后突然发现一个惊天大秘密:\(10000ms\)! 然后就想出个\(O(NM)\)的做法-- 将矩形内的所有点找出来,然后\(O(N)\)求第\(k\)大-- 于是爆\(0\)了.后来才发现是输出的时候漏了句号,而且给出的矩形有\(x0>x1\)或\(y0>…
LINK:calc 容易得到一个nk的dp做法 同时发现走不通了 此时可以考虑暴力生成函数. 不过化简那套不太熟 且最后需要求多项式幂级数及多项式exp等难写的东西. 这里考虑观察优化dp的做法. 不容易看出 f(n,k)是关于k的2n+1次多项式. 证明可以用数学归纳法证明 且还可以从非常规律的转移中看出这应该是一个形似多项式的东西. 可以直接O(n)拉格朗日插值 不过这里懒得写因为 外面dp是\(n^2\)求点值的所以这里没必要O(n). 注意初始化. const ll MAXN=1010;…
#2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作的有效区间是连续的,考虑找到操作x结束的时间ed[x],即执行(x,ed[x]]可以将x加入的数全部弹出,这样用一个vis记录数字次数就可以维护个数: 一种比较暴力的做法是:枚举x,用一个线段树维护还可以放多少个元素,枚举ed[x]更新,但是这样不满足单调性无法two-pointers; 考虑分块.…
题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在最后面加一堆$a_i=c_i=\infty$的石子,确保每次取石子都可以取满$k$个: 先考虑$a_i=0$的情况: 设$f_{i,j}$表示只考虑第0到$i$堆石子,通关前$j$轮的最少操作次数: 设$g_{i,j}$表示只考虑第0到$i$堆石子,前$j$轮结束后再取若干次石子,每次取$k$个,使…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ191.html 题目传送门 - UOJ191 题意 自行移步集训队论文2016中罗哲正的论文. 题解 自行移步集训队论文2016中罗哲正的论文. 代码 所以说我就是来存代码的? #include <bits/stdc++.h> using namespace std; typedef long long LL; LL read(){ LL x=0,f=0; char ch=getchar(); whi…
题目链接 https://loj.ac/problem/3069 题解 复数真神奇. 一句话题意:令 \(f(x)\) 表示以原点 \((0, 0)\) 为圆心,半径为 \(x\) 的圆上的整点数量,求 \(\sum_\limits{i = 1}^N f(i)^k \bmod P\) 的值. 令 \(g(x) = \frac{f(x)}{4}\),那么我们需要求 \(\left(4^k\sum_\limits{i = 1}^Ng(i)^k\right) \bmod P\).打表可得 \(g(x)…
题意:维护一个数列,每个元素是个二维向量,每次可以在后面加一个元素或者删除一个元素.给定P(x,y),询问对于[l,r]区间内的元素$S_i$,$S_i \times P$的最大值是多少. 首先简单地推出类似斜率优化的式子,那么我们需要在凸包上二分. 学习了一下这份代码http://uoj.ac/submission/69959 使用线段树按下标维护凸包.那么这里有一个问题,如果按照传统的写法,合并一次的复杂度是与$O(区间长度)$的,这样会导致单次插入/删除的时间复杂度变为$O(n)$,是不能…
题目描述 http://uoj.ac/problem/88 题解 维护两颗线段树,维护最大值和最小值,因为每次只有单点查询,所以可以直接在区间插入线段就可以了. 注意卡常,不要写STL,用链表把同类修改串起来就好了. 代码 %:pragma GCC optimize() %:pragma GCC optimize() #include<iostream> #include<cstdio> #include<algorithm> #include<cmath>…