摘要:先对一个数来看,注意到拆成的每个正整数只能用一次,也就是100000内的数最多拆成400+个然后来寻找递推,dp[i][j]表示j拆成i个数的方案,这个时候可以i个数都加1,或者新增一个1,问题来了,不能确定原来i个是否有1,所以再开一维[0/1]表示i个数有没有1得到递推式:dp[i][j][0]...
阅读全文
摘要:切比雪夫距离和曼哈顿距离就是变成了八个方向只用一步首先八个方向距离就变成了max(|x1-x2|,|y1-y2|)这样的一个最值式,似乎并没有什么卵用学到了一个非常机智的转化:max(|x1-x2|,|y1-y2|)=(|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2 。这个公式需要从两...
阅读全文
摘要:这个题目和前几天做acdream的那个题目类似,可以说是加强版那个题目是一维点,那个题目其实只用看中间两个点,我当时做的时候就是枚举n个点,然后累加累减距离达到快速计算其他点到该点距离本题完全可以利用这个分开计算其他点到这个点x轴向与y轴向距离和记录id,两次排序,然后累加累减距离,最后选取n个点x...
阅读全文
摘要:想了一会突然想到蓝桥杯最后一题,用了和那题类似的技巧处理,当时写完还自我陶醉了一下,虽然只能过小数据,但我过得姿势好看哇==将边权从大到小排序,然后开始加边,开了一个vis数组(就是这个数组)表示这个集合为真或者假真表示集合内有特殊点,反之无,只要出现两边都为真就ans+该边,vis伴随集合并相应的...
阅读全文
摘要:在纸上画一下可以发现,最终可以加成两部分强连通,然后一部分->另一部分thinking所以就可以利用tarjan来缩点,然后找一个强连通分量使他的入度或者出度为0,可以加到边数为x1*(x1-1)+x2*(x2-1)+x1*x2,减去m就是能加的边选取最大的==-------------------...
阅读全文
摘要:随机开了场多校,题目挺好玩题意化简下来就是比如有5 3 4 6 10 11,那么2-6里面有三个连续区间假设一个区间都是独立的,就是最多有l-r+1个连续区间,然后我们要做的就是减去重复的我们离线从左到右扫描原数组,只要a[i]-1出现在前面,那么就在这个位置+1,表示当前i这个不算独立,同理a[i...
阅读全文
摘要:考虑二进制的每个位对于每个位可能哪些情况为1,仔细想想就出来了==具体实现见代码 1 #include 2 #include 3 #include 4 #define LL long long 5 using namespace std; 6 LL n,a[100005]; 7 double sol...
阅读全文
摘要:需要注意两个地方:1.修改整棵子树就是节点的size,因为子树映射到线段树上是连续的2.并不是区间修改成一个值,所以预处理出子树的和,然后ok数组判断是否被占领 1 #pragma comment(linker,"/STACK:1024000000,1024000000") 2 #include...
阅读全文
摘要:队友给的思路,感觉思路很好啊==对图进行dfs扫描,假设u->v,遇到已经扫过的点v,计算当前点u和v的lca,lca和u以及v之间形成了一个环(计算奇偶)这样只能计算有没有简单的奇偶环,比如两个简单的奇环在一起就成了偶环(无论两个奇环共享几条边)所以在dfs中扫完子树之后,看有没有找到过两个奇环,...
阅读全文