03 2021 档案
摘要:题意:给你一个圆,其圆心O在(0,0),给出圆的半径R, 之后再给出圆内两点P,Q,满足|PO| = |QO|,在圆上找到一点D使得|QD| + |PD|最小。 思路:进行P和Q对这个圆的反演可以得到P'和Q'。易得|QD| + |PD|就是求|Q'D| + |P'D|的最小值(相似三角形)。之后分
阅读全文
摘要:跟这道题挺像的,就不再多讲了。 #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 10; typedef long long ll; struct Point { ll x, y; Point(){x=y=0;} Po
阅读全文
摘要:给出两个凸包。之后有q个询问问你第一个凸包加上给出的向量会不会与第二个凸包有交点。 这里假设A为第一个凸包的点集,B为第二个凸包的点击,p为移动的向量。 那么由题意可以得到: A + p = B, 将式子稍微变形可以得到这个移动向量的范围,即p = B - A 参考链接:https://www.cn
阅读全文
摘要:给出n个点。再给出q个询问。问是否在之前n个点组成的凸包内(不包括边上) 算是存一个log查询是否在凸包内的模板吧。具体就是利用了叉积二分,叉积可以表示线段位置关系所以就可以。 #include <bits/stdc++.h> using namespace std; const int N = 1
阅读全文
摘要:题意:给你一个数字n,让你求1-n之间,十六进制下恰好有k个不同数字的数有几个。 思路:一眼就看出了是数位dp。但是没有仔细去想非常的遗憾。赛后发现其实只需要用一个16位的01串去表示这个数字有没有被用过就行了。 个人喜欢用记忆化搜索写数位dp。给出dp数组。dp[16位的01串][当前枚举数位][
阅读全文
摘要:题意:给定n个结点,m条边的无向连通图。 走过每条路径需要花费(w <= 50)的时间。 每次固定走两步,所耗费的时间为(w1 + w2)²。 输出1到其他所有点的最短时间的最小值。若没有则输出-1。 这道题目在网上有两种做法。其思想都是相同的。 参考连接:https://blog.csdn.net
阅读全文