合集-数学
摘要:原题链接 题解 考虑以下决策 \(x+y\in S\) \(\to\) \(y=-x+S_i\) \(y-x\in S\) \(\to\) \(y=x+S_i\) 答案为红线上点的数量加上蓝线上点的数量减去交叉点(整数)的数量 由于 \(S_i<=c\) 所以 交叉点等价于画斜率等于 \(-1\)
阅读全文
摘要:原题链接 题解 1.数字最多两位,所以数字的拆解方案惟一 2.数字拆开一定变小,所以最后一个数不拆 3.如果拆开,代表当前数大于前一个数,此时拆开要满足几点要求:后面的个位数不大于前一个数,前面的个位数不大于后一个个位数 code #include<bits/stdc++.h> using name
阅读全文
摘要:原题链接 题解 有点思维,已知一个交点不会有三条对角线经过,所以有且只有两条对角线经过,而两条对角线又对应四个顶点,所以变成了组合数学,n个顶点里取四个。 为了防止溢出,这里做了一些处理 code #include<bits/stdc++.h> using namespace std; int ma
阅读全文
摘要:原题链接 题解 由于本题数据范围小,所以考虑暴力 两点确定一条直线,所以我们先确定两个点AB,然后再遍历所有点C,如果向量AB叉乘AC等于0代表共线(没说从哪里起飞) code #include<bits/stdc++.h> #define ll long long using namespace
阅读全文
摘要:原题链接 题解 叉积的运用,scanf控制输入格式 code #include<bits/stdc++.h> using namespace std; struct node { int x,y; }a[100005]; int x[200005],y[200005]; int main() { f
阅读全文
摘要:原题链接 题解 1.将雷达建在海岸线上最优,覆盖的面积最大 2.根据光线可逆,雷达安装的位置覆盖多少小岛,等价于小岛被覆盖需要在哪个范围的位置上安装雷达 3.想象把雷达安装在最左边,然后慢慢往右移,这个时候雷达覆盖的小岛数量会越来越多,当右移到某个原本能覆盖的小岛覆盖不了时,在那个位置安装一个雷达
阅读全文
摘要:原题链接 题解 这么优质的文章我写什么题解 好难解释必然性感觉像模拟?? code #include<bits/stdc++.h> using namespace std; int q[100005]={0}; struct node { double x,y; }a[100005]; double
阅读全文
摘要:原题链接 题解 想象一下,从左上角无限大的地方开始,第一个看到的一定是斜率最小的且截距最大的,慢慢往右下角滑,第一个碰到的直线一定是斜率比前一个小(不一定是第二小)的但是是它的斜率所属直线里截距最大的 重复上述步骤,最外面的直线一定长这样 图片来自luogu,linaonao 所以我们可以按斜率排序
阅读全文
摘要:原题链接 题解 code #include<bits/stdc++.h> #define ll long long using namespace std; const ll mod=1e9+7; ll tag[25]={0}; ll a[25]={0}; ll f(ll now) { ll sum
阅读全文
摘要:原题链接 题解 abcdefg等价于求 a000000+b00000+c0000+d000+e00+f0+g code #include<bits/stdc++.h> #define ll long long using namespace std; ll ten[14]={0}; ll f[14]
阅读全文
摘要:原题链接 题解 1.abcdef= 1 ~ a* + ab* ~ abc + abc* ~ abcd + ... + abcde * ~ abcedf code #include<bits/stdc++.h> #define ll long long using namespace std; ll
阅读全文
摘要:原题链接 题解 1.异或是01变1,11变0,或是01变1,11变1,所以或的越多(即分的组越多),结果越大 2.我们令x=x+1,这样小于等于x的 问题就变成了小于x 的问题,这里我们采用逼近答案的方法。 3.对于某一位而言,如果有奇数个元素在这一位上是1,那么不管怎么分,最后的结果肯定是1,如果
阅读全文
摘要:原题链接 题解 1.要确保任意回合赢回来的钱都要比之前下注的钱的总和要多 令 \(b_i\) 为第 \(i\) 回合下注的钱,则有 \(b_i·k>\sum_{j=1}^{i}b_j\) 则有 \(b_i\ge \left\lfloor \frac {\sum_{j=1}^{i-1}b_j}{k-1
阅读全文
摘要:原题链接 题解 1.如果数字为 \(100110101\) 那么答案为 \(000000000\) ~ \(011111111\) 中,k个1的组合数 + \(100000000\) ~ \(100011111\) 中k-1个1的组合数 +...+ \(1010101...\) (有k个1) 中0个
阅读全文
摘要:原题链接 题解 由于题目能使 \(a_i⊕x≤k\) 的 \(x\) 没有限制,所以我们反过来求能使其成立的x的范围 对于a,k二进制下的第i位,如果都为1,我们可以令此时的x在这一位也为一,然后i后面的位去什么都可以,然后x=0的时候也可能可以,就看后面有没有小于的 如果a为1,k为0,那么此时x
阅读全文
摘要:原题链接 题解 1.任意两点间的异或和等于他们到根节点的异或和的异或,令每个点到根节点的异或值为 \(path[i]\) 2.建立01字典树,塞入所有 \(path[i]\) 然后遍历每个点,找出每个点异或最大对应的点 3.如何找?往当前 \(path[i]\) 的每一位相反的方向移动 code #
阅读全文
摘要:原题链接 题解 然后就变成了求解同余方程 code #define ll long long #include<bits/stdc++.h> const ll mod=19260817; using namespace std; ll x,y; ll c; ll a,b; inline void r
阅读全文
摘要:原题链接 题解 我一直苦苦思考为什么要建边,现在我明白了,如果令 \(x_i\) 代表离源点的最短路径长度的话,建边之后,\(x_i-x_j<=y_k\) 一定成立 只有当出现负环的时候说明条件出现了矛盾 太神了 为什么负环会出现矛盾? 简单认识一下,如果出现负环,代表每到一个点就至少有一条边的约束
阅读全文
摘要:原题链接 题解 1.一眼数位dp, 康托是谁?不认识,在每一位确保小于的时候可以任意取 2.阶乘一开始就要放好 3.在遍历到后面几位的时候,可能前面几位用过了比x小的树,所以我们要知道小于x且没被用过的个数,这就是区间查询加单点修改,树状数组比较方便 4.树状数组的空间复杂度比较小,每个点就对应且只
阅读全文
摘要:原题链接 题解 一个细节坑我好久 code #include<bits/stdc++.h> #define ll long long using namespace std; ll f[15][15]={0};//从最高位第i位数字为j时的数字里有多少windy数 ll solve(ll now)
阅读全文
摘要:原题链接 题解 \(gcd\) 一定能被 \(a[1][1],a[n][m]\) 整除 2.\(gcd\) 能被通过的路径上所有元素整除 由此分析:遍历 \([1,\sqrt{gcd(a[1][1],a[n][m])}]\) 判断能否通过(被路径上所有元素整除) 我还在思考是广搜还是深搜,由于起点终
阅读全文
摘要:原题链接 题解 如果存在某一条边的 \(a_i>=2*(sum-a_i)\) 那么这条边一定有点剩余无法连接,为什么?这条边上每取两个点作为底边点,就一定能去外面一个点作为顶点,且无交叉(顺时针或逆时针) code #include<bits/stdc++.h> #define ll long lo
阅读全文
摘要:原题链接 题解 极端试探法,既然要求 k 的最大值,k 最大为 n,当 k 能取 n 是什么时候?是所有数都相等的时候。 k能不能取n-1?能,给n-1个数同时乘上一个数,等价于剩下的那个数除以一个数(相对大小),而把所有数都除到1,它们就相等了 举例: 2 3 4 5 给后面3个数同时乘上2 \(
阅读全文
摘要:原题链接 题解 请看这 我补充一点:由于 \(x\leqslant 2\) 和 \(n\leqslant 2\) 很明显不对劲,所以要特判一下 二点:像这种看起来需要模拟来找答案的不妨手推一下数学式子来找答案 code #include<bits/stdc++.h> using namespace
阅读全文
摘要:原题链接 题解 本题虽然有思维题做法,但是我认为不具有普世意义,本题的特点在于分治法,即普通算法在平均条件下表现良好,但是在极端条件下极慢,这时候我们需要将极端条件拎出来另做判断 code #include<bits/stdc++.h> #define ll long long using name
阅读全文
摘要:原题链接 题解 1.由于每个点最多修改6次,所以我们可以暴力循环遍历所有点进行修改。然后可以把无需再修改的点跳过,即并查集,指向右端第一个仍然需要修改的值的下标 这样就是单点修改加区间查询,树状数组 时间复杂度 \(6·n·log(n)\)(单点修改)+ \(m·2·log(n)\) (区间查询)
阅读全文
摘要:原题链接 题解 太巧妙了!!! code #include<bits/stdc++.h> using namespace std; int main() { int n,m; cin>>n>>m; int r=0,b=0,y=0; for(int i=1;i<=n;i++) { string s;
阅读全文
摘要:原题链接 题解 看清楚题目,是三个人都坐在同一辆校车!! code #include<bits/stdc++.h> #define ll long long using namespace std; vector<ll> G[200005]; ll depth[200005]={0}; void d
阅读全文
摘要:原题链接 题解 设 \(E_i\) 为树根到高度为 \(i\) 的点的期望用时 \(P_i\) 为 \(i-1\) 到 \(i\) 时,掉下去概率 则有 \(E_i=E_{i-1}+1+(1-P_i) \cdot 0+ P_i \cdot E_i\) 式子解读: 当我花一单位时间到i点时,有p的概率
阅读全文
摘要:原题链接 请跟着我假设的情景走: 我现在随便拿一块砖 \(A\) 放在地上,接着我又拿了一块砖 \(B\) 请问,\(B\) 是放在 \(A\) 上面好,还是放在 \(A\) 下面好? 分类讨论 \(b.v<a.w ,a.v \geq b.w\) 此时 \(B\) 能且只能放在 \(A\) 的上面,
阅读全文
摘要:原题链接 题解 关键因素:调和级数 \(\frac{1}{n}+\frac{1}{n-1}+...+\frac{1}{2}+\frac{1}{1}\) 可以近似看成 \(log(n)\) code #include<bits/stdc++.h> using namespace std; #defin
阅读全文
摘要:原题链接 题解 先不考虑k的限制,而是考虑对于任意一个数,存不存在一个k使得题目所给等式成立 当 \(n·k\) 没有进位时,等式一定成立 (赛时也许想到这就够了) 假如有进位呢? 对于任何一个位数大于1的数,必有 \(D(n) \lt n\) (想想十进制是怎么表示数的) 而对于位数为1的数,有
阅读全文
摘要:定理:\(a^{φ(n)} ≡ 1 (mod\ n)\) 首先,我们需要了解一些前提条件: \(n\) 是一个正整数 \(a\) 是与 \(n\) 互质的整数 \(φ(n)\) 是欧拉函数,表示小于 \(n\) 且与 \(n\) 互质的正整数的个数 考虑集合 \(S = \{x_1, x_2, ..
阅读全文
摘要:原题链接 题解 遍历所有的子集肯定不行,所以我么考虑某些数作为 \(mex\) 的值时的贡献,也就是求 \(i\) 作为 \(mex\) 的值时,有多少子集的 \(mex\) 是 \(i\) 实施 对于 \(i \leq n\) ,假设子集选了 \(k_1\) 个小于 \(i\) 的数,\(k_2\
阅读全文
摘要:原题链接 题解 设花为 1 ,花盆为 0,我们先确保花之间有空隙,即 \(1010....0101\) 接下来再插入 \(n-m-(m-1)\) 个花盆进入 1 与 1 之间 则有 \(C_{n-m+1}^{m}\) 种插法(相当于m个黑球,n个白球有几种排列方法) 再乘上 \(A_m\) ,即花与
阅读全文
摘要:原题链接 题解 一个合法的括号序列,满足 长度为偶数 前缀和处处不小于0 左括号等于右括号数量 code #include<bits/stdc++.h> #define ll long long #define lowbit(x) ((x)&(-x)) using namespace std; co
阅读全文

浙公网安备 33010602011771号