[AGC 018 E] Sightseeing plan】的更多相关文章

STO ZKY ORZ Description 给定一张网格图和三个矩形,每次只能向上或向右走.你需要从矩形 \(A\) 中的一个点 \(S\) 出发,到达矩形 \(B\) 中的一个点 \(P\) ,在矩形 \(C\) 中的一个点 \(T\) 结束旅程.只要 \(S,P,T\) 不同或者经过的路径不相同均可看作不同的方案.问总方案数. Solution 一.点到点 如果我们从 \((0,0)\) 出发要走到 \((x,y)\),那方案数就是 \(C(x+y,x)\). 二.点到矩形 \(F(x,…
题意: 给定三个矩形,选定三个点,答案加上第一个点出发经过第二个点在第三个点结束的方案数,只能往右或往下走. 折腾了我半个多下午的题. 设三个矩形为$A,B,C$一个思路是枚举$B$的那个点$s(x,y)$,求出$s$到$A$中所有点的方案数的和乘上$x$到$B$中所有点的方案数的和,复杂度爆炸. $s$到$A$中所有点的方案数的和等于$$\sum_{i=x1}^{x2}\sum_{j=y1}^{y2} C_{x-i+x-j}^{x-i}$$ 用二维前缀和的方法容斥一下,变成了求(顺便化简)$$…
原题链接 鸣谢:AGC 018E.Sightseeing Plan(组合 DP) 本蒟蒻认为,本题堪称网格路径问题观止. 因为涵盖了不少网格路径问题的处理方法和思路. 一句话题意: 给你三个矩形. 三个矩形从左下到右上排开.矩形顶点坐标范围是1e6 1≤X1≤X2<X3≤X4<X5≤X6≤106 1≤Y1≤Y2<Y3≤Y4<Y5≤Y6≤106 大概就是这样: 对于所有的1中选择一个点P1,2中选择一个点P2,3中选择一个点P3. 求从P1到P2再到P3的最短路径条数之和. 从一个矩…
BZOJ 3709• 有n只怪物,你的初始生命值为z.• 为了打败第i只怪物,你需要消耗cost[i]点生命值,但怪物死后会使你恢复val[i]点生命值.• 任何时候你的生命值都不能小于等于0.• 问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉 • n≤100,000 一些怪物是赚血的,一些是亏血的. 肯定要先打完所有赚血的,再打亏血的. 打赚血的: 为了保证能够有血,先打cos小的最保险. 微扰法证明:如果先打大一些的,如果能打,那么打小一些的也能打,而且血更多了,一定还能打那一个大…
题目链接 \(Description\) 给定三个不相交的矩形\(A(X1,Y1)-(X2,Y2),B(X3,Y3)-(X4,Y4),C(X5,Y5)-(X6,Y6)\),求 从第一个矩形中某点\(a\)出发,经过第二个矩形中的某点\(b\),到达第三个矩形中某点\(c\) 的路径数.\(a,b,c\)有一个不同则路径算作不同. \(1\leq X1\leq X2<X3\leq X4<X5\leq X6,1\leq Y1\leq Y2<Y3\leq Y4<Y5\leq Y6\).…
F - Two Trees 链接 题意: 给定两棵都是N个节点的有根树,节点均从1~N标号.给每个标号定一个权值(类似一号点的权值是x,那么两棵树中1号点的权值都是x),使在两棵树满足以任意节点为根的子树的权值和为1或-1.输出任意一种解或判断无解,N<=100000. 分析: 欧拉回路. 首先每棵子树的权值和都-1或者1,,如果知道了每个点有多少个子节点,那么就可以知道他的奇偶性(奇数个儿子=>权值为偶数,偶数个儿子=>权值为奇数).现在可以判断无解了:如果同一个节点在两棵树内的奇偶性…
题面在这里! 天呐,我已经做了一天水题了mmp 养生最重要,恩. 首先发现最终序列里的元素肯定是 <= max 的,因为无论何时序列里都不会有负数,所以减的话不会变大(反向大只有>2*max才行,这显然不可能). 并且新加的元素可以是 序列中原来元素任意线性组合得到的,所以一下子想到了gcd. 只有max >= k 且 max-k是gcd倍数的时候才是POSSIBLE,为什么呢? 第一个之前已经说了,第二个的话发现是  (max-k , gcd) = gcd,左边可以减去任意倍的gcd得…
https://wenku.baidu.com/view/2445a0322f60ddccda38a023.html 关键点:不超过7条 根据咕咕原理,所以答案最少是N/7;(N小于49就暴力) 随机化找两个点判断直线上的点个数,随机500次,概率就很高了 法二: 点数大于50,答案至少是8 答案一定是7条路之一 随机找7个点,按照级角序排序,点数大于7的直线就删去上面的点(之后random不考虑,但是实际上不能真删除,因为可能两条路有交点),每次一定可以找到至少一条路 复杂度就很稳了 思想:有…
这个ai<=2000有点意思 启发我们用O(W^2)的算法 FFT不存在,对应关系过紧 考虑组合意义转化建模,再进行分离 (除以2不需要逆元不懂为啥,但是算个逆元总不费事) 由于终点可能在起点的右下,所以,从左上到右下要再做一遍 但是每个终点正上方的起点统计了两次,再减掉即可 (注意大力卡常: 1.s2[i][j]没有,就不用算了 2.f,ans开long long 尽量减少取模 3.组合数用阶乘计算 ) #include<bits/stdc++.h> #define il inline…
A - Getting Difference 我们肯定可以得到这些数的gcd,然后判断每个数减整数倍的gcd能否得到K #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define pdi pair<db,int> #define mp make_pair #define pb push_back #define enter putchar('\…