分治
文章平均质量分 51
a1214034447
这个作者很懒,什么都没留下…
展开
-
2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)
题目链接:https://vjudge.net/contest/339284#overviewA.Numbers待做B.Broken Watchs = 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 · 864 阅读 · 0 评论 -
poj 1741 - 点分治
解题思路:以某一点为根节点的任意两点形成的路径有两种情况:1.两个点的公共最近父祖先是根节点。2.两个点的公共最近父祖先不是根节点。这里记dis[i]为i节点到根节点的距离,那么不管两个节点是属于上面哪一种情况,只要满足dis[j]+dis[i]<=m(限制距离),那么他们两个形成的路径一定是满足条件的,但是如果是第二个情况,虽然可以,但是白白加上了2倍的公共边,所以应该要减去这样的情况,那...原创 2018-04-21 17:53:07 · 211 阅读 · 0 评论 -
hdu 1007 - 平面最近点对 - 分治
题目链接:点击这里 解题思路:将坐标按x从小到大排序,现在将原问题大小(l,r)分为两个部分(l,mid),(mid+1,r),记这两区间的最小距离为d1,d2d = min(d1,d2),显然d不一定是最小的答案,因为可能两个区间各拿去一个点的距离更小.设从左区间拿出点P1,右区间拿去点P2,显然P1到x == mid的中轴线距离不能超过d,不然不管去找任何P2答案都肯定大于...原创 2018-09-25 21:02:51 · 344 阅读 · 0 评论 -
poj 3714 - 平面最近点对
题目链接:点击这里 解题思路:在原有的分治算法上加上标记,如果标记不同的则计算距离,不然的话就返回无穷大.用归并排序再可以省下logn这题要是卡数据不知道有什么更高深的办法. #include <iostream>#include <cstdio>#include <cstring>#include <cmath>...原创 2018-09-25 22:57:26 · 428 阅读 · 0 评论 -
hdu 5324 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将L,R看做平面直角坐标系坐标(x,y),将R变成-R,那么就变成x轴,y轴持续变小的最长连续序列.用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护.先处理有半部分在根据有半部分得到左半部分. #include<bits/stdc++.h>#define fi first#define se secondusing na...原创 2018-10-02 13:19:35 · 193 阅读 · 0 评论 -
hdu 4742 - CDQ分治 + 树状数组
题目链接:点击这里 解题思路:将一个轴(z轴)从小到大排序(排序过程注意x,y也要讨论).之后的问题就变成了在排序数组中找到最长上升序列问题了.然后用CDQ分治 + 树状数组,x轴排序,y轴用树状数组维护,就ok了. #include<bits/stdc++.h>#define fi first#define se secondusing namespace...原创 2018-10-02 13:29:06 · 240 阅读 · 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 · 180 阅读 · 0 评论