摘要: 先把所有边可动设为r[i]又这些边不是l就是r(如果想一个方向改变能更优的话就尽量多的改变),每次跑dijsktra,对于可动边(x,y),如果dis1[x] include include include define ll long long using namespace std; const 阅读全文
posted @ 2019-05-08 21:44 lokiii 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 这个告诉gcd的操作实际上就是告诉一个因数是否选,最坏情况是1,判断掉所有因数才能选 然后肯定是用猜不重复质数积比较划算,问题就变成若干个质数,分成数量尽量小每组乘积 include using namespace std; const int N=10005; int n,p[N],tot,ans 阅读全文
posted @ 2019-05-08 19:53 lokiii 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a b c d,ka=4,kb=2,kc=3,kd=4,按字典序就先选c然后b就不能合法了) 所以倒着来,建反图,然后按照n k[i]从大到小拓扑,因为是反图所以是 阅读全文
posted @ 2019-05-08 19:31 lokiii 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 降智好题 前面随机部分按照题意模拟,然后字典序贪心,也就是记录每个值的位置从1~nm依次看能不能取,能取的话更新行的取值范围(它上面的行一定取的列小于等于这个数取的列,下面行大于等于) cpp include include using namespace std; const int N=5005 阅读全文
posted @ 2019-05-08 17:33 lokiii 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 把期望改成方案数最后除一下,设h[i]为最大值恰好是i的方案数,那么要求的就是Σh[i]\ i 首先包含其他区间的区间是没有意义的,用单调栈去掉 然后恰好不好求,就改成h[i]表示最大值最大是i的方案数,求Σ(h[i] h[i 1])\ i即可 然后考虑h怎么求,\\( h[i]=\sum_{j=1 阅读全文
posted @ 2019-05-08 16:29 lokiii 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 妙啊,是一个逼近(?)的做法 把两个值最为平面上的点坐标,然后答案也是一个点。 首先求出可能是答案的点xy分别是按照c和t排序做最小生成树的答案,然后考虑比这两个点的答案小的答案,一定在xy连线靠近原电一侧(不过这部分并不全都能更新答案),然后最小的一定是距离xy连线最远的,设为点z,也就是三角形x 阅读全文
posted @ 2019-05-08 10:30 lokiii 阅读(192) 评论(0) 推荐(0) 编辑