摘要:
题目大意 每次加入一个值,并且询问之前加入的数中与该数相差最小的值。 答案输出所有相差值的总和。 解题分析 = = 参考程序 c++ include using namespace std; const int INF=2000000000; class splay_tree { private: 阅读全文
摘要:
题目大意 有r*s张扑克牌,数字从1到 r,每种数字有s种颜色。 询问对于所有随机的d张牌,能选出c张组成顺子的概率和组成同花的概率。 解题分析 对于组成顺子的概率,令dp[i][j][k]表示一共选出了i张牌,数字从1~j,最后有k张牌是顺子。对于每个数字进行考虑,有0~s种选法。要保证连续c张牌 阅读全文
摘要:
题目大意 将一个含有+,-,^,()的表达式按照运算顺序转换成树状的形式。 解题分析 用递归的方式来处理表达式,首先直接去掉两边的括号(如果不止一对全部去光),然后找出不在括号内且优先级最低的符号。如果优先级相同,则如果是左结合性(+,-,*,/)则选择最右边的一个,如果是右结合性(^)则选择最最左 阅读全文
摘要:
题目大意 给出一个或与表达式,每个正变量和反变量最多出现一次,询问是否存在一种方案使得每个或式中有且仅有一个变量的值为1。 解题分析 将每个变量拆成三个点x,y,z。 y表示对应的正变量,z表示对应的反变量。 由S向每个点的x部连一条流量为1的边,表示该变量的某个正变量或反变量的取值为1。 由每个点 阅读全文
摘要:
题目大意 有n种物品,m种建筑,p个人。 n,m,p∈[1,20] 每种建筑需要若干个若干种物品来建造。每个人打算建造一种建筑,拥有一些物品。 主角需要通过交易来建造自己的建筑,交易的前提是对方用多余的物品来换取自己需要的物品。 询问主角是否能建造成功自己的建筑,并给出方案。 解题分析 超级恶心的读 阅读全文
摘要:
Problem 平衡树 SBT 题目大意 维护一个序列,支持两种操作。 操作一:插入一个数。 操作二:询问第k小的数。 解题分析 ~~刷刷水题,再熟悉一下splay的基本操作。 ps:哇咔咔,有连续四天的假期了,好开心~~ 参考程序 1 #include <bits/stdc++.h> 2 usin 阅读全文
摘要:
Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y。 操作2:删除编号在区间【x,y】内的数。 操作3:将编号在区间【x,y】内的数的权值增加为z。 操作4:询问编号在区间【x,y]内的数的权值和。 解题分析 由于增加了区间加和区间查 阅读全文
摘要:
Problem 平衡树 Splay 题目大意 维护一个数列,支持三种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 操作三:删除大小在区间【a,b】内的数。 解题分析 和上一题相比,多了一个删除的操作。 首先将a的前驱节点x旋转到根,然后将b的后驱节点y旋转到x的右孩子,这样所有大 阅读全文
摘要:
Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作。 操作1:添加一个数x。 操作2:询问不超过x的最大的数。 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的,不过用指针的时候还是需要注意一些小细节,要防止对空指针进行赋值。 之后继续把指针版splay的各种 阅读全文
摘要:
Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案。 解题分析 最多点的数量就是入度为偶数的点。 将入度为奇数的点每两个组成一队,连一条无向边,之后求出欧拉回路即可。 参考程序 1 #include < 阅读全文
摘要:
Problem Digit Tree 题目大意 给一棵树,有边权1~9。 询问有多少个点对(i,j),将i--j路径上的数字依次连接后所形成新数字可以被k整除。gcd(K,10)=1 解题分析 点分治。考虑某一次分治,根为rt,求出所有子节点到根所形成数字为A,根到所有子节点所形成数字为B。 那么即 阅读全文
摘要:
Problem Tree 题目大意 给一棵树,有边权。求树上距离小于等于K的点对有多少。 解题分析 点分治。对每一棵子树进行dfs,求出每棵子树的重心,继而转化为子问题。 对于经过根的路径i--j,令dep为到根距离,那么需求出dep[i]+dep[j]<=k,且i,j属于不同子树,可以求其补集,求 阅读全文
摘要:
problem sort 题目大意 有n个数组,每个数组有a[i]个元素,每次可以将至多k个数组合并为一个数组,所花费代价为这些数组的元素和。给定代价上限,求将所有数组合并为1个数组的最小k。 解题分析 二分k后就成了k叉哈夫曼树问题。 对于k叉哈夫曼树,可以利用所合并元素的权值单调性,用两个双端队 阅读全文
摘要:
problem Iahub and Xors 题目大意 一个n*n的矩阵,要求支持两种操作。 操作1:将一个子矩阵的所有值异或某个数。 操作2:询问某个子矩阵的所以值的异或和。 解题分析 由于异或的特殊性,可以用二维树状数组来维护。 因为同一个值只有异或奇数次才有效,因此若单点修改某个点,那么其影响 阅读全文
摘要:
Problem Different GCD Subarray Query 题目大意 给定n个数的序列,有q个询问,每次询问一个区间中所有子区间所形成不同的gcd的数量。 解题分析 由于固定一个数为右端点,所能形成的gcd共有logn,所以可以预处理出每个数为右端点所能形成的gcd,相同gcd取左端点 阅读全文