03 2019 档案
摘要:POJ1039题解我们把(xi,yi-1)--(xi,yi)作为一条垂直线段,那么一共有n条线段。 枚举任意两个点最为一条直线。从左开始枚举线段。如果与每一条线段都能相交,那么就是全部穿越了。 如果与第一条线段不...
阅读全文
摘要:POJ1066题解方法很简单,就是边界上的每一个结点与终点的连线,与图中线段的交点的个数。最后还要加1,因为边界也要炸。 为什么这样子呢?因为只有跨越端点的时候才会改变交点数量。代码#include #inclu...
阅读全文
摘要:POJ2074题解看着上面的图讲话。就是求两条直线与最下面直线的交点。 注意如果障碍物不在h的下方或者不在r的上方,就不要计算了。 先对障碍物左端点排序,然后从左到右扫描。用一个标记last记录盲区的右端点,就是...
阅读全文
摘要:定义const double eps = 1e-8;int dcmp(double x){ //判断符号 if(fabs(x) 0) return Length(v3); else return Dist...
阅读全文
摘要:POJ2826题解:看似简单的题,却很考验综合能力容量为0的情况其中一条线段与x轴平行 两天线段平行或者重合 两条线段无交点 有交点,但一条线段的上半部分却覆盖掉了另外一条线段的上半部分。这里需要求斜率。C++A...
阅读全文
摘要:POJ1696题意:给你平面的一个点集,然后要你从y坐标最小的点开始以水平方向向下一个点连线,每次只能直走或左转,问你最多能走多少点?题解:极角排序先以y为基准排序,找到y最小的点最为起始点。 每次以基准点进行极...
阅读全文
摘要:POJ1410题解:细节很多,需要注意给出的矩阵左上角和右下角没有必然关系。 线段在矩阵内部也算相交。 规范相交和非规范相交都要考虑。代码#include #include #include #include #...
阅读全文
摘要:POJ1556题解暴力任意两个点之间连线,判断有没有线段与之相交,没有求两点之间的距离。否则inf 跑最短路,floyd方便不超时。 我对点的处理有点麻烦 x号点和y号点之间的线段编号范围 1列:1,2,3,4包...
阅读全文
摘要:POJ1269题解两直线ab和cd平行:ab×cd = 0 两直线重合:在平行的基础上满足ac×ad = 0 否则求交点。代码#include #include #include #include #includ...
阅读全文
摘要:POJ3304题解所有线段的投影都交于一点,相当于有一条直线的垂线经过所有的线段。 直线经过所有的点,我们可以旋转直线,使它恰好经过线段的两个端点,所有O(n^2)枚举端点。 判断ab直线和线段cd是否相交,只要...
阅读全文
摘要:POJ2318题解:n个纸板把矩形分成(n+1)个区域,m个玩具随机仍在里面,求每个区域的玩具的个数,区域编号从0开始到n。 二分查找点在哪个位置。如果点P在某条线段AB的左边(A在上面,B在下面),那么PA×P...
阅读全文
摘要:题解模拟多项式的除法。 注意精度问题和0多项式。代码#include using namespace std;int const N = 100000 + 10;double const eps = 1e-8;d...
阅读全文
摘要:POJ1990题意:牛i和j沟通,音量为abs(c[i].x-c[j].x) * max(c[i].v,c[j].v); 求任意两头牛通话的音量总和题解按牛的耳背程度从小到大排序 每加入一头牛,其耳背程度一定是最...
阅读全文
摘要:HDU6444题解环的大小为n,每次跳k步,所有有gcd(n,k)个不同的环,每个环的大小为len = n / gcd(n,k)。接下来对每一个环进行分析。 先对环的权值求和sum。 如果sum ≤0,那么找长度...
阅读全文
摘要:HDU1005题解:一道循环规律题。既然是模7,那么有49种组合。在[3,49]内枚举,如果重现了f[1]和f[2],那么就是一个循环。代码:#include using namespace std;int co...
阅读全文
摘要:HDU2620题解Σ1using namespace std;typedef long long ll;ll n,k;int main(){ while(~scanf("%lld%lld",&n,&k)){ l...
阅读全文
摘要:HDU3524题解学会了打表找规律的技巧 2 2 3 4 7 12 23 44 87 172 343 684 1367 2732 5463 奇数项2 3 7 23 87 343 1367 5463 偶数项2 4 ...
阅读全文
摘要:HDU2683题解:两边约,得到,n为完全数。完全数:本身等于所有真因子的和。如果是素数,那么是完全数。枚举一下,发现完全数屈指可数。代码:#include using namespace std;typedef...
阅读全文
摘要:CaptionHDU2619求原根的数量代码:#include using namespace std;typedef long long ll;ll n;ll euler(ll n){ ll ans = n;...
阅读全文
摘要:题意:有多少对数满足题解:易知:,令含有,含有,含有那么a,b,c至少有一个为i1,一个为0。剩下的一个可以取遍[0,i1]。为了防止i1和0重合,可以先取[1,i1-1],在取两个i1或者两个0。共有6*(i1...
阅读全文
摘要:题解:和互质:假设两者不互质:设,则,矛盾。所以设因为p为质数,所以这样算出来p不一定是质数,所以枚举值验证一下。代码:#include using namespace std;int const N = 1e6...
阅读全文
摘要:题意:求出2008^N所有因数对的和对k取余的结果M。再求2008^M对k取余的结果。题解:2008 = 2^3 * 251^1 2008^N = 2^(3N) * 251^N 因子和用排列组合计算为:∑2^i ...
阅读全文
摘要:HDU2104题解:(s + km) % n 能够取到[0,n-1]中的所有的数 k = 0,1……证明:当且仅当n和m互质时,才能取到[0,n-1]之间所有的数。首先要明白一个简单的结论:k在[0,n-1]可以...
阅读全文
摘要:POJ2942题解:首先把不敌对的骑士连一条边,即原图的补图。 要开一个会议,得形成一个环。所以求点-双连通分量。 考虑每个连通分量,人数必须为奇数个。所以进行二分图奇偶染色。 这里有一个结论:二分图一定是偶圈。...
阅读全文
摘要:HDU3394题解:第一问为两个环都包含的边。所以要考虑是点-双连通分量。如果这个连通分量的边数m大于点数n,那么它每条边都在两个环当中。所以我们只需计算m > n的连通分量中边的条数即可。 这题不能拿边双连通分...
阅读全文
摘要:点-双连通分量:任意两点之间至少存在两条“点不重复”的路径。等价于内部无割点边-双连通分量:任意两点之间至少存在两条“边不重复”的路径。等价于内部无桥Tarjanvoid dfs(int u){ pre[u] =...
阅读全文
摘要:POJ1523题意:问一个连通的网络中有多少个关节点,这些关节点分别能把网络分成几部分题解:求割点的题目。给的网络一定是连通的,割点就是在无向连通图的前提下。最后注意输出,每两个Case之间有个blank。代码:...
阅读全文
摘要:POJ1985题解: 求树中最长路。从任意点出发BFS找最远的点,再从最远的那个点BFS找最远的点便是直径。 代码:#include #include #include #include #include #in...
阅读全文
摘要:HDU4612题意:加一条边最多还有几座桥。题解:Tarjan缩点后,任意两点之间的边都是桥。我们只要求任意两点之间最多的桥,也就是树的直径。两次BFS即可。 从任意点出发BFS找最远的点,再从最远的那个点BFS...
阅读全文
摘要:POJ3352题解:至少加几条边,才能使任意两点之间至少有两条不同的路可以走,也就是边-双连通。题目中没有重边。 Tarjan缩点,再求出入度为1的点的个数s。要加的边为(s + 1)/ 2。【网上找的公式,找不...
阅读全文
摘要:POJ3694题解:首先说一下,一模一样的题目在HDU和POJ上得到的结果与众不同。HDU在vector记录边AC,在POJ上用C++和G++不是TLE就是RE。最后改为邻接矩阵,C++1400ms左右AC,G+...
阅读全文
摘要:POJ1144题解:无向图求割点。割点满足的条件:如果是根节点,那么根节点必须至少有两个子树。 如果不是根节点,对于边(u,v)满足lowlink[v] >= pre[u],此时u为割点。也就是说,v只能通过u才...
阅读全文
摘要:POJ1236题解: task A:给出多少个点,能传遍所有的点。求入度为0的点的个数 task B:加上多少个点,才能成为强连通图。即求max(sum(outdegree == 0),sum(indegre...
阅读全文
摘要:POJ2186题解:找出一个强连通分量,判断其它边是否全部直接或者间接指向它 利用Kosaraju找强连通分量 如果找到了强连通分量A,下一个强连通分量B,在原有向图中,一定是A指向B。 所以最后一个强连通分量必...
阅读全文
摘要:题解:题目很高大上,实际上就是求一课最小生成树。模板题目。最后记录树中最长的边。代码:#include using namespace std;int const N = 50000 + 10;int const...
阅读全文
摘要:题解:思路还是很简单的,就是暴力模拟。 注意如果cancel的行还是cancel,那么上一个cancel的记录不用管,不用想太复杂。出题人没解释清楚。 详细处理见代码。代码:#include using name...
阅读全文
摘要:CCF:201512-4送货题解:条件为奇数度的点有且仅有2个或者0个。并且连通,连通可以用并查集判断。 字典序最小就优先考虑数字小的点。 算法流程:dfs标记经过的边,且不再恢复,表示删除这一条边,然后经过下一...
阅读全文
摘要:HDU2837题解:看成是一道欧拉降幂公式的模板题吧。快速幂模板要修改一下,其它的都一样。代码:#include using namespace std;typedef long long ll;ll n,m;l...
阅读全文
摘要:PTA:L3-004 肿瘤诊断题解:三维BFS。注意坐标的建立。代码:#include using namespace std;int const N = 200 + 10;int n,m,h,t;int w[N...
阅读全文
摘要:PTA:L2-006 树的遍历题意:中序遍历+后序遍历=>层次遍历题解: 由算法可知,每次找到后序遍历的最后一个元素即post[pos],从中序遍历中找到in[mid] = post[post],mid划分树。 ...
阅读全文
摘要:PTA:L3-007 天梯地图 题解:一开始题目没有看仔细,way = 1,代表单向,way = 0代表双向,不是没有路(很坑)。两次Dijkstra,然后保存路径。代码:#include #define st ...
阅读全文
摘要:PTA:L3-010题解:先构建一棵二叉搜索树,注意是左边大右边小。判断是否是完全二叉树的方法是:如果是完全二叉树,那么层次遍历正好遍历n个结点,而且没有空结点。代码:指针版#include using name...
阅读全文
摘要:HDU2462题解:找一个最小的l的倍数,满足每一个数都是8,输出数的长度。 设8 * (10^n - 1) / 9 = L * p 10^n - 1 = p * L * 9 / 8 = p' * L * 9 ...
阅读全文
摘要:欧拉函数的证明 求单个数的欧拉函数 int euler(int n){ int ans = n; for(int i=2;i*i 1) ans = ans / n * (n - 1); return ans;}欧...
阅读全文
摘要:HDU2879题解:参考https://blog.csdn.net/codeswarrior/article/details/81433946关于积性函数积性函数定义:对于正整数n的一个算术函数 f(n),若f(...
阅读全文
摘要:HDU5475题解:因为有模所以不能轻易除。 逆元?可是不互质呢? 直接线段树处理。n次操作,每个叶子结点初始化为1,如果乘以某个数x,这个节点边为x;除以某个数,叶子结点变为1,维持区间的乘积。求的是node[...
阅读全文
摘要:除数互质void extgcd(int a,int b,int &x,int &y){ if(!b){x = 1,y = 0;} else{extgcd(b,a%b,y,x); y -= (a/b)*...
阅读全文
摘要:lowbit函数:x&-x思想:lowbit函数找的是二进制最右边的1。计算机机器语言中,-x实际上是x的补码,补码是x取反加1。 举个例子 x = 00001100, -x = 11110011 + 1 = ...
阅读全文
摘要:NYOJ536题解: Ai = pi-1 * pi f(i,j) = min{f(i,k) + f(k+1,j) + pi-1*pk*pj} 代码1:记忆化搜索#include using namespace...
阅读全文
摘要:二分图判定方法:交叉染色牛客二分图判定#include using namespace std;int const N = 1e5 + 10;int n,m;vectorG[N];int color[N];boo...
阅读全文

浙公网安备 33010602011771号