08 2015 档案
摘要:先n++, m++显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不合法方案cnt比较麻烦.枚举对角线(左下-右上), 即(0, 0)-(x, y), 我们发现这种情况有...
阅读全文
摘要:每进行一次, 编号为x的数对x, 和(x+1)%N都有贡献用矩阵快速幂, O(N3logK). 注意到是循环矩阵, 可以把矩阵乘法的复杂度降到O(N2). 所以总复杂度就是O(N2logK)-------------------------------------------------------...
阅读全文
摘要:写了一个早上...就因为把长度为m的也算进去了...dp(i, j)表示准考证号前i个字符匹配了不吉利数字前j个的方案数. kmp预处理, 然后对于j进行枚举, 对数字0~9也枚举算出f(i, j)表示dp(x-1, j)对dp(x, i)的贡献.然后用矩阵快速幂就可以了. 时间复杂度O(M3log...
阅读全文
摘要:按照题意dp...dp(l, r) = min{ dp(l, x) + dp(x+1, r) , 折叠(l, r) }折叠(l, r)我是直接枚举长度然后哈希判..--------------------------------------------------------------#inclu...
阅读全文
摘要:最普通的轮廓线dp... 复杂度O(nm2min(n, m))--------------------------------------------------------------------#include#include#includeusing namespace std;typedef...
阅读全文
摘要:显然是最小割...对于规律(i, j, k) i,j 互相连边, 容量为k对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边.跑最大流, 用总收益减去就是答案了...挺好想的一道题...#includeusing namespace ...
阅读全文
摘要:求 φ(m!) * n! / m! .拆开得 m! *∏ (p-1)/p * n! / m! =∏ (p-1)/p * n! (p|m!)我们可以预处理出1~m的∏ (p-1)/p 和 n!. 注意到取模的数为质数, 那么就可以用乘法逆元和线性筛预处理前者.时间复杂度O(MAXN)-O(1)#inc...
阅读全文
摘要:颓废了很多天暑假作业...好不爽啊..虽然还是没写完....
阅读全文
摘要:welcome!感觉还是得有个留言板才好...虽然没什么人来..留言的话在这里评论就行了
阅读全文
摘要:最多只有2列..分开来dp1列 dp(x, k) = max( dp(x - 1, k), dp(p, k - 1) + sum(p+1~x) )2列 dp(a, b, k) = max( dp(a - 1, b, k), dp(a, b - 1, k), dp(p, b, k - 1) + sum...
阅读全文
摘要:用splay维护序列, 二分+hash来判断LCQ..#includeusing namespace std;typedef unsigned long long ull;const int maxn = 100009;const int P = 1000173169;ull K[maxn];int...
阅读全文
摘要:单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab)(话说还是deque2048ms快..list3572ms慢死了)#includeusing namespace...
阅读全文
摘要:显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况.判断一个数m是否是满足题意的lcm. m = ∏piai, 当∑piai≤ n时是满足题意的. 最简单我们令循环长度分别为piai,不足n的话,我们令其他循环长度为1, 补到=n为止. 这样它们的lcm显然是=m的.然后就是一个背包了.....
阅读全文
摘要:...字符串hash.假如长度x是一个循环节, 那么对于任意n(x | n)也是一个循环节.设当前询问区间[l, r]长度为len = ∏piai, 最终答案ans = ∏piai' ,我们只需枚举len的质因数来确定ai'即可#includeusing namespace std;typedef ...
阅读全文
摘要:写了个暴力...然后就AC了...记录每个数出现的位置, 然后每次询问用二分暴力匹配...极端情况可以卡到O(m²logm)...#includeusing namespace std;const int maxn = 1000009;vector pos[maxn];int N;int main(...
阅读全文
摘要:线段树的合并..对于一个点x, 我们只需考虑是否需要交换左右儿子, 递归处理左右儿子. 1 #include 2 3 using namespace std; 4 5 #define M(l, r) (((l) + (r)) >> 1) 6 7 typedef long long ll; 8 ...
阅读全文
摘要:ORZjcvb... 1 #include 2 3 using namespace std; 4 5 const int maxn = 100009; 6 7 int N, M, item[maxn], V[maxn]; 8 vector o, cnt, Div; 9 10 int main(...
阅读全文
摘要:从左到右, 从右到左分别dp一次, 然后就可以回答询问了.----------------------------------------------------------#includeusing namespace std;const int V = 1000;const int maxn =...
阅读全文
摘要:对y坐标离散化, 然后按x坐标排序, dp. 一个点(x, y), 设到达这个点接到的最多乘客数为t, 那么t可以用来更新y'>=y的所有点.用树状数组维护最大值.--------------------------------------------------------------------...
阅读全文
摘要:矩阵快速幂...+快速乘就OK了--------------------------------------------------------------------------------------#includeusing namespace std;typedef long long ll...
阅读全文
摘要:裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案.----------------------------------------------------------------------#includeusing namespace std;const int maxn = 409...
阅读全文
摘要:题意: N个礼品箱, 每个礼品箱内的礼品只有第一个抽到的人能拿到. M个小孩每个人依次随机抽取一个, 求送出礼品数量的期望值. 1 ≤ N, M ≤ 100, 000挺水的说..设f(x)表示前x个人都选择完成后礼品剩下数的期望值( f(0) = N ), 那么f(x) = f(x - 1) - f...
阅读全文
摘要:题意大概是:给出N个硬币, 面值为a_i, 问要凑成X元哪些硬币是不可或缺的.1 ≤ N ≤ 200, 1 ≤ x ≤ 10^4直接枚举, 然后就是01背包了. 为了不让复杂度多乘个N, 我们就从左往右, 从右往左分别dp一次.这样判断一个硬币就是O(X).总时间复杂度O(NX)----------...
阅读全文
摘要:裸树链剖分...-------------------------------------------------------------------#includeusing namespace std;const int maxn = 300009;struct edge { int to; e...
阅读全文
摘要:果然写得短就跑得慢...直接用set就行了(你要写棵平衡树也可以).没有包含的话, 假如L(i) using namespace std;typedef pair pii;const int maxn = 100009;set S;int L[maxn], R[maxn], N;int main()...
阅读全文
摘要:dp(i)表示前i个人最少坐多少辆车, dp(i) = min(dp(j) + 1, dp(i)) (0 using namespace std;const int maxn = 2509;int sum[maxn], dp[maxn], N, M;bool ok(int i, int j) { r...
阅读全文
摘要:数据范围这么小..怎么乱搞都可以吧...先排序一遍然后O(n²) dp------------------------------------------------------------------#includeusing namespace std;const int maxn = 109;...
阅读全文
摘要:枚举每头牛, 假设它在说谎, 建图判圈就行了...为啥水题都没人来写..------------------------------------------------------------------#includeusing namespace std;typedef pair pii;con...
阅读全文
摘要:对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) + 1 (假如(i, j)和右边和下边不冲突)第二问就是经典的悬线法解决最大子矩阵了, 维护悬线H[...
阅读全文
摘要:最大子矩阵...悬线法..时间复杂度O(nm)悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到.------------------------------------------------------------------#includeu...
阅读全文
摘要:直接求逆序对就行了...时间复杂度O(nlogn)-------------------------------------------------------------------------#includeusing namespace std;#define idx(c) ((c) - 'A...
阅读全文
摘要:处理出每个数下一个出现的位置, 然后按左端点排序回答询问、处理当前数去除的影响--------------------------------------------------------------------#includeusing namespace std;#define lowbit(...
阅读全文
摘要:为什么我的后缀数组跑得这么慢...把字符串复制一遍放在最后, 然后跑sa, 扫一遍就行了...---------------------------------------------------------------------#includeusing namespace std;const ...
阅读全文
摘要:二分答案m, 后缀数组求出height数组后分组来判断.------------------------------------------------------------#includeusing namespace std;const int maxn = 20009;struct HASH...
阅读全文
摘要:子树操作, dfs序即可.然后计算using namespace std;#define M(l, r) (((l) + (r)) >> 1)const int maxn = 200009;typedef long long ll;inline ll readll() { char c = getc...
阅读全文
摘要:离线, 询问排序.先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了--------------------------------------------------------------------#include...
阅读全文
摘要:8.2早上第一个到学校...学校把我们的宿舍安排到了西校区..十分钟路程...感人肺腑下午在SGU看了几道题然后就回宿舍收拾行李了...晚上颓废然后滚回宿舍了8.3早上做了一场比赛, T1写了个贪心结果就70分...T2写完发现理解错题意了...然后就弃疗了, T3没什么思路...中午被学校告知要搬...
阅读全文
摘要:水题...忘了取模就没1A了....---------------------------------------------------------------------------#includeusing namespace std;const int MOD = 5000011;const...
阅读全文
摘要:速度居然#2...目测是因为我没用long long..求∑ lcm(i, j) (1 using namespace std;typedef long long ll;const int maxn = 10000009;const int MOD = 100000009;bool check[m...
阅读全文