`
darren_nizna
  • 浏览: 72574 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论
文章列表
题意为给定一个矩形,矩形中有一些点,要使一个半径为 r 的圆穿过这个矩形而不经过这些点,至少得去掉这些点的几个点。 将上边界看成源,下边界看成汇,点到源距离小于直径,则边一条无穷大边,同样,点到下边界距离小于直径,连一条无穷大边,将点拆成两点,权值为 cost, 对任意两点,距离小于直径则连无穷边,问题就转化成求新图的最小割。 具体建图见代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int const N= 250, ...
题意:给你 n 个单词,求出满足以下条件的单词个数:长度不大于 L 且单词中至少包含一个子串为前面 n 个单词中任意一个。先求出所有单词的数量 26^1+ 26^2+ ... + 26^L,可以用矩阵乘法求出,也可用逆元的方法。然后求出所有不包含 n 个单词的串的数量,这个求法和 pku 2778 相同,只是这里要求出所有长度不大于 L 的字符串数量和,方法参考 pku 3233。两者相减就是答案。对那个 2^64 求余,用unsigned __int64 存储的数据,相乘溢出后剩下的结果,就直接是对2^64取模的结果。   #include <iostream> #inclu ...
LTC 男人八题之一,解题报告见09看论文。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int const N= 10010, inf= 0x7fffffff; int n, k, cnt, tot, root, size, nchild, first, last, pre, ans; int Fnum; struct ...
这题杯具的写了一下午,真是太菜了。。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> using namespace std; int const N= 100010; int n, m; struct Node{ int Lx1, Rx1, Ax1; int Lx0, Rx0, Ax0; int op1, op2, op3; int num; }; Node tb[N ...
先用AC自动机构建一个不含有任何病毒串的 DFA , dp[i][j] 表示到目标串的第 i 个字符,DFA 状态为 j 时的最小修改数量。则 dp[i][ son[j] ]= min{ dp[i][ son[j] ], dp[i-1][j]+ (tran[j][ son[j] ]!= str[i] ) }  tran[j][ son[j] ]表示从 j 到 son[j] 经过的字母边。 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define min(a ...
利用AC自动机构建一个 DFA, 该 DFA 不经过任何模式串。然后问题转化为在一个图上找经过 n 条边的路径条数。 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef long long LL; int n, m, cnt= 0; LL mat[200][200]= {0}; struct Node{ int next[4]; int fail, flag; void init(){ for( int i= 0; i< ...
查找多个串是否在目标串中出现,简单的AC自动机应用。。。 代码: #include <iostream> using namespace std; struct Node{ int next[100]; int fail, flag; void init(){ for( int i= 0; i< 100; ++i ) next[i]= 0; fail= -1; flag= 0; } }; Node tb[100000]; int n, cnt, m; char str[10010]; int mark[1010]; ...
原题链接:http://codeforces.com/contest/12/problem/D 给一系列三维点(x,y,z)。求出满足以下条件的点个数: 对点 (x1,y1,z1 ) ,  存在一个点 (x2,y2,z2)  使得 x2> x1, y2> y1, z2> z1。 先按 x 从大到小排序,再将 y 离散化。从前到向扫描,对于点(x,y,z), 在大于 y 的区间内找到最大的 z1,如果 z1> z, 则答案加 1. 代码: #include <iostream> #include <cstdio> #include & ...
问题最终转化为,求出 height 数组后,求 max{ (j- i+ 1)* ( min( height[i..j] ) ) },相当于找一个最大的矩形。 求F(a^b)% c  因为 c 比较小,可求出其循环节。 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef __int64 LL; int const N= 200110; int wa[N], wb[N], ws[N], wv[N]; int rank[N], height[N], s ...
给你 n 个字符串,求出最长的子串,使得子串在大于一半的字符串中都出现。 先将 n 个字符串用 n 个不同的字符连接起来。求出 height 数组后,二分子串长度 k, 查找是否存在连续的大于 n/ 2+ 1 个后缀的 height 值都大于 k。这里要求这 n/ 2+ 1 都属于不同串,可以用一数组进行标记,具体做法详见代码。 代码: #include <cstdio> #include <cstdlib> #include <cstring> int const N= 200100; int wa[N], wb[N], wv[N], ...
先将数据按 a_i 从小到大排序,然后直接背包。。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> struct Node{ int h_i, a_i, c_i; }; bool operator<( Node a, Node b ){ return a.a_i< b.a_i; } Node dat[410]; int dp[4001 ...
题目意思可以归结为给一个字符串,求可重叠的 k 次最长重复子串。 二分 k ,然后在 height 数组中找是否存大连续 k 个数都大于  k。 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int const N= 1000100; int wa[N], wb[N], ws[N], wv[N]; int rank[N], sa[N], height[N], r[N], n, k; int cmp( int* r, int a, int b, int L ...
题意在一个整数序列中求出相邻元素相差不超过 m 的最长子序列。 易得到 dp 方程。 dp[i]= max{ dp[j]+ 1,  1<= j < i 且 d[i] 与 d[j] 相差不超过 m }  方程复杂度为  o(n^2) 。 用线段树对方程进行优化,先将数据离散化,使得数据范围变成 [1,n]。在上述方程求 dp[i] 的值时,对 i 前面的数遍历找出最优值相当于在区间 [ d[i]- m, d[i]+ m ] 内找出最优值,这个可以用线段树优化,使得复杂度达到 nlogn。 代码: #include <iostream> #include <c ...
1.给你一棵边带权的树,求出树中每一个点到其它点的最大距离。 2.在一个整数序列中找一个最大的连续序列,使得该序列中最大数和最小数之差不超过 m 。 问题 1 可用树形 DP 解决。对树进行 DFS,DFS 过程中,对根 R,记录他的孩子结点到他是最大距离和次大距离以及相应的结点。然后用一次 BFS 更新。 问题 2 用两个指针 head, tail分别指向连续序列的首尾,如果区间 [head,tail] 满足条件,则 tail++,更新值最大最小值,不满足条件则 head++, 用线段树更新最大最小值。   注意图不能用 STL 的 vector 和 pair 保存,这样会 TLE。 ...
题目意思为有一系列村庄,然后对一些村庄进行破坏或修复。让你求与某村庄直接或间接相连且都没有破坏的村庄数量。   对于每一个区间,用线段树维护从区间左端点开始的最大连续没破坏的村庄数量 Lx 以及以区间右端点结点的最大连续没破坏的村庄数 Rx,很容易更新这两个值及求出要求的数量。   代码: #include <iostream> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> using namespace st ...
Global site tag (gtag.js) - Google Analytics