合集-数学
摘要:原题链接 题解 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\ge \left\lfloor \frac {\sum_{j=1}^{i-1}b_j}{k-1
阅读全文
摘要:原题链接 题解 由于题目能使 的 没有限制,所以我们反过来求能使其成立的x的范围 对于a,k二进制下的第i位,如果都为1,我们可以令此时的x在这一位也为一,然后i后面的位去什么都可以,然后x=0的时候也可能可以,就看后面有没有小于的 如果a为1,k为0,那么此时x
阅读全文
摘要:原题链接 题解 1.任意两点间的异或和等于他们到根节点的异或和的异或,令每个点到根节点的异或值为 2.建立01字典树,塞入所有 然后遍历每个点,找出每个点异或最大对应的点 3.如何找?往当前 的每一位相反的方向移动 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
阅读全文
摘要:原题链接 题解 我一直苦苦思考为什么要建边,现在我明白了,如果令 代表离源点的最短路径长度的话,建边之后, 一定成立 只有当出现负环的时候说明条件出现了矛盾 太神了 为什么负环会出现矛盾? 简单认识一下,如果出现负环,代表每到一个点就至少有一条边的约束
阅读全文
摘要:原题链接 题解 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)
阅读全文