摘要:
这道题非常容易能看出费用流的解法。但是这里要介绍一种反悔贪心的解法(其实是因为最近都在做反悔贪心 首先容易知道,反悔贪心其实每次就是把决策后的反悔贡献加入优先队列。 那么这道题我们就可以先强制让对team1贡献大的先当作team1。之后在优先队列里加入反悔贡献(即让这个人去team2产生的贡献 te 阅读全文
摘要:
题意:给你一个圆,其圆心O在(0,0),给出圆的半径R, 之后再给出圆内两点P,Q,满足|PO| = |QO|,在圆上找到一点D使得|QD| + |PD|最小。 思路:进行P和Q对这个圆的反演可以得到P'和Q'。易得|QD| + |PD|就是求|Q'D| + |P'D|的最小值(相似三角形)。之后分 阅读全文
摘要:
放个github的链接吧(项目还是挺不好传到博客园的): 阅读全文
摘要:
跟这道题挺像的,就不再多讲了。 #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 阅读全文
摘要:
尺取法也叫双指针。 应用尺取法很重要的一个地方就是满足区间单调性。 什么叫区间单调性呢? 比如假设都是正数的数组,你选定了一段[L, R],当R变大时,这一段的区间和会不断增大,而当L增大时,区间和会不断减小,这就是区间单调性了。 还有就是出现 >= k个不同字符的区间,当R变大时,区间中的字符个数 阅读全文
摘要:
现在还不是很懂cdq分治是啥。 我对它的理解大概就是一种分治方法 / 思想。 这个方法有一些限制:[区间L] < [区间R](需要对整个数组sort一遍) 这个方法可以做到:用来解决各种区间段转移问题[x->y(x<y)]的,比如,求逆序对数。(本质上就是计算左区间对右区间的贡献) 拓展:将修改转化 阅读全文