![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
a1214034447
这个作者很懒,什么都没留下…
展开
-
2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)
题目链接:https://vjudge.net/contest/339284#overview A.Numbers 待做 B.Broken Watch s = input() s = s.split(" ") A,B,C,N = list(map(int,s)) n = (N-1) // 2 ret = N*N*N - 3*N*(n)*(n-1) - N - 3*N*(...原创 2019-11-06 22:53:13 · 856 阅读 · 0 评论 -
poj 1741 - 点分治
解题思路:以某一点为根节点的任意两点形成的路径有两种情况:1.两个点的公共最近父祖先是根节点。2.两个点的公共最近父祖先不是根节点。这里记dis[i]为i节点到根节点的距离,那么不管两个节点是属于上面哪一种情况,只要满足dis[j]+dis[i]<=m(限制距离),那么他们两个形成的路径一定是满足条件的,但是如果是第二个情况,虽然可以,但是白白加上了2倍的公共边,所以应该要减去这样的情况,那...原创 2018-04-21 17:53:07 · 200 阅读 · 0 评论 -
hdu 1007 - 平面最近点对 - 分治
题目链接:点击这里 解题思路: 将坐标按x从小到大排序,现在将原问题大小(l,r)分为两个部分(l,mid),(mid+1,r),记这两区间的最小距离为d1,d2 d = min(d1,d2),显然d不一定是最小的答案,因为可能两个区间各拿去一个点的距离更小. 设从左区间拿出点P1,右区间拿去点P2,显然P1到x == mid的中轴线距离不能超过d,不然不管去找任何P2答案都肯定大于...原创 2018-09-25 21:02:51 · 336 阅读 · 0 评论 -
poj 3714 - 平面最近点对
题目链接:点击这里 解题思路: 在原有的分治算法上加上标记,如果标记不同的则计算距离,不然的话就返回无穷大. 用归并排序再可以省下logn 这题要是卡数据不知道有什么更高深的办法. #include <iostream> #include <cstdio> #include <cstring> #include <cmath>...原创 2018-09-25 22:57:26 · 421 阅读 · 0 评论 -
hdu 5324 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将L,R看做平面直角坐标系坐标(x,y),将R变成-R,那么就变成x轴,y轴持续变小的最长连续序列. 用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护.先处理有半部分在根据有半部分得到左半部分. #include<bits/stdc++.h> #define fi first #define se second using na...原创 2018-10-02 13:19:35 · 180 阅读 · 0 评论 -
hdu 4742 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将一个轴(z轴)从小到大排序(排序过程注意x,y也要讨论).之后的问题就变成了在排序数组中找到最长上升序列问题了. 然后用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护,就ok了. #include<bits/stdc++.h> #define fi first #define se second using namespace...原创 2018-10-02 13:29:06 · 233 阅读 · 0 评论 -
hdu 5730 - CDQ分治 + fft
题目链接:点击这里 解题思路: dp[]表示长度为i的项链的方案值. dp[i] = ∑dp[j]*a[i-j] (j<i) 两边都有dp[],所以选择分治FFT #include <bits/stdc++.h> using namespace std; typedef long long ll; const double pi = acos(-1); c...原创 2018-10-09 21:35:17 · 171 阅读 · 0 评论