LINK:Exclusive OR 没做出 原因前面几篇说过了. 根据线性基的知识容易推出 不超过\(w=log Mx\)个数字即可拼出最大值 其中Mx为值域. 那么考虑w+2个数字显然也为最大值... 现在要处理的是 \(1~w-1,w+1,w+3,w+5...\)这些位置上的值怎么求. i个数字异或出来的最大值 且一个数字可以重复使用. 那么其实设\(f_{i,j}\)表示利用i个数字能否异或出j来 那么这个转移其实是异或卷积. 直接上FWT即可. 考虑\(w+1\)的值是什么 也不太好求…
LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到set来找前驱后继 第三个 考虑比x大的数字中两个连着的数字差的最小值 直接用线段树维护一下即可. code //#include<bits\stdc++.h> #include<iostream> #include<iomanip> #include<cstdio>…
LINK:Greater and Greater 确实没能想到做法. 考虑利用bitset解决问题. 做法是:逐位判断每一位是否合法 第一位 就是 bitset上所有大于\(b_1\)的位置 置为1. 那么右移一位就得到下次判断的东西 然后 处理处相应>=\(b_2\)的东西 然后再&一下. 这样复杂度为\(\frac{nm}{w}\) w取64 所以可以通过. 不过值得一提的是 预处理的那个东西不能全部预处理出来 因为这样做 空间复杂度是\(\frac{nm}{w}\)的会爆掉. 直接维护…
LINK:Keyboard Free 我要是会正经的做法 就有鬼了. 我的数学水平没那么高. 三个同心圆 三个动点 求围成三角形面积的期望. 不会告辞. 其实可以\(n^2\)枚举角度然后算出面积 近乎可以得到面积的期望. 正解的话 听李指导说的意思是指二维积分?辛普森积分即可??? 值得一提的是 三角形面积我也不会计算 自闭了. code //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #in…
LINK:Just Shuffle 比较怂群论 因为没怎么学过 置换也是刚理解. 这道题是 已知一个置换\(A\)求一个置换P 两个置换的关键为\(P^k=A\) 且k是一个大质数. 做法是李指导教我的. \(k\sqrt{A}=p\)即\(A^{\frac{1}{k}}=p\) 设当前置换大小为r 那么有 \(A^r=I\)其中I为单位置换. \(A^{r+1}=A\)那么有\(A^{ar+1}=A\) 原式等于\(A^{\frac{ar+1}{k}}=P\) 那么只需要随便找个a满足\(k|…
LINK:Interval 赛时连题目都没看. 观察n的范围不大不小 而且建图明显 考虑跑最大流最小割. 图有点稠密dinic不太行. 一个常见的trick就是对偶图转最短路. 建图有点复杂 不过建完跑最短路即可. 当做复习了一下吧. 值得注意的是需要开\(long long\) code //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<ctime> #includ…
LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 这个是构造不太一样 最后也没能搞出来. 不过后了我wa了几发之后 我唯一的队友看不下去了 他来做这道题了 最后还是过了这道题.(有一个好队友就是很舒服 可以想到从叶子节点到跟的过程 每个叶子节点必须要向上合并 因为其父亲的那条边需要被覆盖. 这要到达某个节点会有很多叶子节点相遇 此时考虑父亲那条边…
LINK:Boundary 计算几何确实是弱项 因为好多东西都不太会求 没有到很精通的地步. 做法很多,先说官方题解 其实就是枚举一个点 P 然后可以发现 再枚举一个点 然后再判断有多少个点在圆上显然会超时. 直接考虑求出所有点和\(O,P\)的夹角 因为同弧所对圆周角相等 最后统计有多少个角度相等来做. 一个误区是 两个对称的圆上的点被算在一起了 此时强制利用 第三个点在所在直线的左侧/右侧来消除影响. 正确性显然.复杂度\(n^2\cdot logn\) 一个比较好想好写的做法: 枚举到第三…
LINK:All with Pairs 那天下午打这个东西的时候状态极差 推这个东西都推了1个多小时 (比赛是中午考试的我很困 没睡觉直接开肝果然不爽 一开始看错匹配的位置了 以为是\(1-l\)和\(r-(r-l+1)\)进行匹配. 我想这不是随便写个trie树???码完发现过不去样例 我真的是眼瞎 后来看清了. 大致思路如下 可以直接暴力枚举\(n^2\)个点对 找到最大的匹配位置这个也可以暴力 由于串长总和是M. 这一部分复杂度也不过是\(n^2+M\)的. 过不了 就可以思考能不能从大到…
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 1 1 1 1 1 有篇博主的代码细节处理的很好,由于矩阵每行的长度一致,则不必重复在数组末尾标记0:然后由于j是从1,最开始如果push进0的话,有两个好处: 1.可以不受栈之前"残留"的元素m+1的影响 2.不用再判断栈是某为空来确定wid的值 Code #include <b…
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, find out the K-th minimum weighted clique. A subset of vertices of an undirected graph is called clique if and only if every two distinct vertices in th…
传送门:Boundary  题意:给你n个点的坐标,问最多有多少个点可以在同一个圆上,(0,0)必须在这个圆上. 题解:三个点确定一个圆,所以暴力枚举两个点和(0,0)组成的圆,如果三个点不共线的话,用圆心公式求出圆心,然后用map记录以当前点为圆心的点圆的个数,边记录边判断有多少个圆圆心是同一个点,取最大值就好了. 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define pb push_back 4 #define ft firs…
传送门:All with Pairs 题意:给你n个字符串,求出,f(si,sj)的意思是字符串 si 的前缀和字符串 sj 后缀最长相等部分. 题解:先对所有的字符串后缀hash,用map记录每个hash值(后缀)有多少个一样的.这个地方后缀的 hash 值可以将字符串倒过来求,每次乘以base^ i ,这和字符串正着求每次 t=t *base + s 是一样的,可以想象一下,前后缀相同位置乘base的次数是一样的.然后遍历所有的前缀的hash,在map里找当前 hash 值出现的次数的记录下…
传送门:Fake Maxpooling 题意:给出矩阵的行数n和列数m,矩阵 Aij = lcm( i , j )  ,求每个大小为k*k的子矩阵的最大值的和. 题解:如果暴力求解肯定会t,所以要智取.前几天刷蓝书的时候看到这种求区间最值的可以用单调队列,这个题就是用单调队列求解.先横着算一下每个长度为k的区间的最大值记录下来,然后再把记录下来的数组竖着同样算一下,最后求和.求最小公倍数的时候,不能用__gcd(),会 t 的.这个题的矩阵不会超long long ,所以用 int 就好了,不然…
题意:有一个\(n\)x\(m\)的矩阵,\(A_{i,j}=lcm(i,j)\),对于每个\(k\)x\(k\)的子矩阵,其最大元素贡献给答案,求答案的最大值. 题解:矩阵构成我们直接\(i*j/gcd(i,j)\)即可,然后就要去找每个子矩阵中的最大元素. ​ 这题我们可以用单调队列来求,首先先对每一列维护长度为\(k\)的最大值,并且用数组记录前\(n-k+1\)行所对应的最大值,之后我们再对之前记录的数组的每一行维护最大值,然后贡献给答案. 如果真的不懂,建议去了解了解单调队列,这题基本…
K-Kabaleo Lite 题目大意: 给出每种菜品的利润以及碟数,要求我们给每个客人至少一碟菜,要求从1号菜品开始给,给的菜品的号码是连续的,每个客人同号码的菜都只能给一碟.求能招待客人的最大数量以及在客人最多的情况下能获得的最大利润. 解题思路: 1.首先,因为要求从1号菜品开始给,所以能招待的客人的最大数量就是1号菜品的碟数. 2.用结构体记录1-x号菜品各一碟可以获得的利润以及x的位置,后续按照利润从大到小的顺序对结构体进行排序. 3.给客人的菜一定是1-x各一盘这种情况,可以用一个t…
传送门:Kabaleo Lite 题意 有n道菜,1≤n≤105,a[i]是每道菜可以赚的钱,−109≤ ai ≤109,b[i]是这道菜的个数,1≤bi≤105,你每次只能选从1开始连续的菜,然后问最多有多少顾客,并且顾客最多的前提下赚的钱最多是多少. 题解 这个题的重点在于会用__int128,我都没见过,好菜呜呜. 从数据可以看出,爆long long了,一开始没发现,和队友疯狂wa,然后还是不会负数的大数,赛后发现可以用__int128,__int128的用法见:https://blog…
BCFH B. Basic God Problem 题意 给出c和n,求fc(n). 题解 递归到最后 fc 函数肯定等于1,那么就变成了求c被乘了几次,只要找到 x 最多能被分解成多少个数相乘就好了.预处理用线性筛求出每个数最多能被分解成多少个数相乘,快速幂求出解. 代码 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define pb push_back 4 #define ft first 5 #define sd second…
Minimum-cost Flow 题目:给n个点,m条边.接下来m行包含(a,b,c),即a,b之间有单位流量代价为c的边.接下来有q个问题,每个问题给定(x,y),即假设每条边的容量为x/y时,从点1到点n流1单位的流量,最少的花费是多少,如果无法从点1到点n流1单位的流量则输出“NaN”. 思路:首先我们需要想到一个结论,每条边最多只能使用一次,这个自己比划一下就可以,其中包含贪心的想法.得到这个结论后,我们发现整张图就变成了流量为1的网络流.然后,根据(x,y)说明我们至少需要 y /…
B - Graph 题目链接 每次操作不会改变两点之间的路径异或和 以 1 号点为起点,算出任意一点到 1 号点的异或值 dis[i](把该值当做 i 号点权值), 那么任意两点的异或值为 \(dis[i]~xor~ dis[j]\),该值也是 i, j两点的边权. 计算xor最小生成树即可(模版题),具体来说,将每个点的权值二进制表示后,优先考虑高bit位,分成两组,组内递归解决子问题,组与组之间要找两个异或结果最小的点连边(可以用Trie在O(n*30)实现). 为什么可以这么做,因为优先考…
Count New String 题意: 定义字符串函数 \(f(S,x,y)(1\le x\le y\le n)\),返回一个长度为y-x+1的字符串,第 i 位是 \(max_{i=x...x+k-1}S_i\) 设集合\(A = {f(f(S, x_1,y_1),x_2-x_1+1,y_2-x_1+1)|1\le x_1 \le x_2 \le y_2 \le y_2 \le n}\) 求集合A 的大小 \(N\le 1e5\) 字符集大小 <=10 分析: 先放出官方题解 方法一 核心点…
传送门:Game SET 题意 一套牌有四种属性,每种属性都有三种特征,shapes (one, two, or three), shape (diamond, squiggle, or oval), shading (solid, striped, or open),  color (red, green, or purple),如果是*,可以选任意一种.给出n套牌,每套牌给出[<number>][<shape>][<shading>][<color>],…
传送门:Interesting Computer Game 题意 给出n对数,你可以操作n次,每次操作只能在下面三种中选择一种,问最多可以选多少个不同的数字. 什么都不做 如果a[i]以前没选过,那么可以选择a[i] 如果b[i]以前没选过,那么可以选择b[i] 题解 想法很简单,就是一个并查集. 如果a[i]和b[i]的父亲一样,那么用一个数组记录一下这个父亲,说明这个堆里有环,否则把a[i]和b[i]合并,然后用map离散化(菜鸡懒惰的做法),计算每个堆里有多少不同的数字,如果这个堆里有环,…
传送门:J. Easy Integration 题意:给你n,求这个积分,最后的结果分子是记为p,分母记为q. 求(p*q-1)mod 998244353. 题解:比赛完看到巨巨说这是贝塔函数,我一搜还真是. 贝塔函数的递推公式: 但是菜鸡只会打表找规律.那么说说怎么找到的规律吧. 先把所有的分子分母都找到,这个要用到(x-1)^n=C(n,0)x^n(-1)^0+C(n,1)x^(n-1)(-1)^1+C(n,2)x^(n-2)(-1)^2+--+C(n,n)x^0(-1)^n   ,(-1)…
一.题意 我们是穿越银河的火箭队....... 给出若干个区间,之后给出若干个点,要求对每个点求出,第一个覆盖点的区间的数量,之后用当前所有点覆盖的区间的序号的乘积结合输入的Y来生成下一位点.最后输出,每个区间第一次覆盖的点的序号. There are n trains running between Kanto and Johto region. Assuming the railway is a number line, the i-th train travels from coordin…
一.题意 给出你的N门课程的考试成绩和所占的机电数目.允许你放弃K门课的成绩,要求你的平均学分绩最高能达到多少. Kanade selected n courses in the university. The academic credit of the i-th course is s[i] and the score of the i-th course is c[i]. At the university where she attended, the final score of he…
题意:给你一个n, 接来下给你一个 [1,n] 中偶数的排列, 还有一个 [1, n] 中 奇数 按照递增的顺序排列, 现在求一个原数列, 使得偶数列排序 和 奇数列 都是原数列的一个子序列, 现在求原数列的最小的逆序对是多少. 题解: 昨天一直想的是把偶数列往奇数列里面插入, 又想到这个东西有一定的单调性, 但是不好处理. 现在我们转换思路, 将奇数列往偶数列中插入, 对于这种写法来说, 你递增的 2i+1 的最优位置一定也是递增的. 假设我们现在知道了 2k+1 对于每一个插入位置产生的逆序…
这个题目一个队友没读懂, 然后我读错了题目, 还让他堆了半天的公式写了半天的代码, 交上去一直0.0, 另一队友问题目有没有读错, 我坚持没有读错, 然后坑了2个小时的时间,不然应该会早一点做出来. 题意: 平面上有n个不重和的点, 现在定义一个集合是好的, 那么就需要满足, 这个集合里的每一个子集 都存在一个 {(x, y) |x >= a,  l <= y <= r}(a, l, r为任意实数) 的这个区域与原来集合求交 之后能表示出来.求这个n个点所组成的集合的非空子集有多少个是合…
题意: 现在有n条火车, 每条火车都有一个运行 [ Li, Ri ], 现在有m支火箭队, 每次火箭队都会破坏这整条铁路上的一个点, 如果一条火车的运行区间[Li, Ri] 被破坏了, 那么这条火车会立刻停止. 题解:线段树, 先将所有火车的左右端点排好序, 然后每一个叶子节点都是一个火车的区间, 每一颗子树的根节点都保存着子树内所有火车的运行区间的最左边的点 还有 最右边的点,然后xjb乱找, 如果找到一条火车被破坏了, 那我们就将这条火车的左端点改成 inf  右端点改成 -inf, 这样就…
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一下这一道题,首先看到n不是多大就想用dfs(超时),又在dfs的基础上记忆化(超时),大概是我记忆化不完全.又想用01背包,打出来代码后发现s就是体积,但是s的范围太大了,数组存不下 T_T 看题解发现用一个叫 折半枚举(就是一种思想) 和 二进制枚举 的东西 折半枚举:比如有时集合过大无法全部搜索…