上一页 1 2 3 4 5 6 7 ··· 18 下一页
摘要: http://www.cppblog.com/vici/archive/2011/09/05/155103.html容斥原理(翻译)前言:这篇文章发表于http://e-maxx.ru/algo/inclusion_exclusion_principle,原文是俄语的。由于文章确实很实用,而且鉴于国内俄文资料翻译的匮乏,我下决心将其翻译之。由于俄语对我来说如同乱码,而用Google直接翻译中文的话又变得面目全非,所以只能先用Google翻译成英语,再反复读,慢慢理解英语的意思,实在是弄得我头昏脑胀。因此在理解文章意思然后翻译成中文的时候,中文都不知道如何表述了。而又由于我对容斥原理知识的匮乏, 阅读全文
posted @ 2012-11-01 21:28 AC_Von 阅读(474) 评论(0) 推荐(0) 编辑
摘要: wikipedia上的解释和证明:http://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithmTheTonelli–Shanksalgorithm(referred to by Shanks as the RESSOL algorithm) is used withinmodular arithmeticto solve a congruence of the formwherenis aquadratic residue(modp), andpis an oddprime.Tonelli–Shanks cannot be used 阅读全文
posted @ 2012-11-01 16:30 AC_Von 阅读(2861) 评论(0) 推荐(0) 编辑
摘要: 二分法只适用与线性函数,当函数脱离线性而呈现凸性或者凹性的时候,三分是很有必要的。三分过程如下图:凸函数:凹函数:实现方法:double Calc(double p) { /*...*/}double Solve(double MIN, double MAX) { double Left, Right; double mid, midmid; double mid_area = 0, midmid_area = 0; //*** Left = MIN; Right = MAX; while (Left + eps < Right) { mi... 阅读全文
posted @ 2012-10-30 11:23 AC_Von 阅读(1468) 评论(0) 推荐(0) 编辑
摘要: 第一次做训练计划的时候没有做出来。。。回头又看了看, 就是个高中物理题。已知周期,求多长时间运行到一条线上。已知每个行星的角速度为vi = 2*π/Ti,选择一个行星T0作为坐标系,则其他行星的相对速度为vi' = (T0 - Ti)*2π/(T0*Ti)。则角度绕过半个圆周的时间为Ti' =π/vi' = (T0*Ti)/((T0 - Ti)*2)这样就是求所有Ti‘的分子的LCM和所有Ti’分母的GCD。ps:注意两点,1、去掉周期相同的,2、用BigInteger。View Code import java.util.*;import java.io.*;impo 阅读全文
posted @ 2012-10-30 09:26 AC_Von 阅读(891) 评论(0) 推荐(0) 编辑
摘要: 感觉树状数组要比线段树优雅。。。反素数打表什么的都搞好了,就是从当前位置推下一个位置的公式没搞出来,后来看得别人的。。。if(p[now].x > 0) nxt = (nxt - 1 + p[now].x)%leave;else nxt = ((nxt + p[now].x)%leave + leave)%leave;然后在树状数组里找第nxt大的数(二分)。。。View Code //#pragma comment(linker,"/STACK:327680000,327680000")#include <iostream>#include <cs 阅读全文
posted @ 2012-10-28 09:50 AC_Von 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 很明显的费用流,不过建图还是卡住了。。。问的gb才知道怎么建图。。。先是源点到n个串,容量是a[i],费用是0,然后是串t中包含的所有不重复字母为一个节点,从这些节点向汇点T连边,容量是当前字母的个数,费用是0。然后是n个串向T中的字母连边,容量是a[i]中当前字母的个数,费用是i。ps:费用流模板有问题。以至于debug了好久。。。T_TView Code //#pragma comment(linker,"/STACK:327680000,327680000")#include <iostream>#include <cstdio>#includ 阅读全文
posted @ 2012-10-27 08:04 AC_Von 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 胡伯涛的《最小割模想在信息学竞赛中的应用》中讲到了最大密集子图。而这题是一个很裸的最大密集子图。。。定义:无向图G中存在一个子图G‘,使得G‘中|E|/|V|最大。即:分数规划,设一个猜想值g,构造一个新函数h(g) = max{sigma(Xe) - sigma(g*Xv)} (Xe属于边集,Xv属于点集)有:已知:乘以-1得:乘以2化简得:其中C[V', !V']表示的图的最小割。所以可以根据如下方式建图:dv最大为m,所以U = m即可, 1/n <= g <= m/1;同时有一个结论:任意两个密集子图,他们的密度查不小与1/n2另外(摘自Discuss):这 阅读全文
posted @ 2012-10-25 20:14 AC_Von 阅读(3060) 评论(0) 推荐(0) 编辑
摘要: A:水题,不愧是岛娘出的题,这么有“特色”B:对一个数X分解质因子得 X = p1a1 * p2a2 * p3a3 * ... pkak ,X的因子数为 (a1 + 1)*(a2 + 1)*(a3 + 1)*...*(ak + 1);先打了个1...1000000的表,然后直接算的。手贱!忘了取模,后来改过以后丢了好多score。。。C:还以为是推个毛规律,随便推出来一个挂了。。。T_T,发现有的大神的写法。直接枚举 [n-100, n]区间上的所有数的组合就行。。。ps:C题这次hack的好爽。。。。^_^ 阅读全文
posted @ 2012-10-21 21:09 AC_Von 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 第一次做DIV1,果断爆0。。。弱B的孩子伤不起啊。。。275pt那题调了一上午没调出来,明显的傻逼dp就是不会写。。。T_T参考DD大神的思路:dp[i][j]表示从第i个位置贴一个长度为L的stamp,颜色为j。。。。View Code class Stamp {public: int dp[N][4]; int cc(char c) { if(c == 'R') return 0; if(c == 'G') return 1; if(c == 'B') return 2; return 3; } ... 阅读全文
posted @ 2012-10-21 21:01 AC_Von 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 比赛过去差不多半周,现场赛题目总结的差不多了,写一下比赛总结吧。。。(部分流水帐-_-!)10/11晚: 出发去长春,开始了这辈子坐的时间最长的一次火车。10/12晚: 六点到达长春站。终于体会到北国的天气,一件薄线衣,一件卫衣,我只能庆幸好没有感冒。然后是长春市拥堵的交通,到达东师会馆。令发票,邀请函,衣服,等。入住旅馆。虽然在火车上颠簸了20小时,但当晚睡得还是不是很好。第二天早晨六点多就醒了,然后感觉身上有点痒,赶紧起来吃了药(该死的荨麻疹!)。10/13上午: 早晨起来老师说带我们出去转转,于是乎,我们接受了一场爱国主义教育^_^。上午8点多,到达伪满皇宫,话说溥仪这位末代皇帝也真.. 阅读全文
posted @ 2012-10-18 17:12 AC_Von 阅读(300) 评论(2) 推荐(0) 编辑
摘要: 部分题目:比赛队友过掉的题目,没有过掉但有可能过掉的题目。。。B:傻逼2-sat题,据说是道poj原题,共有31位,对每一位进行2-sat判一下。fuck,一个很坑人的trick,给的b[][]不一定是合法的。如果不合法,直接输出NOView Code //#pragma comment(linker,"/STACK:327680000,327680000")#include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <cst 阅读全文
posted @ 2012-10-18 16:23 AC_Von 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图。问这个图中生成树的个数。因为数据量并不大,O(N^3)的建图没有问题。建好图以后就可以用kirchhoff矩阵计算生成树的个数,之所以写这道题的解题报告是因为在高斯消元解kirchhoff矩阵时,需要用到逆元。(a/b)% mod,如果a,b的范围很大,结果会有很大的误差,这里可以转换一下 b*x = 1(% mod)则x为b的逆元 (a/b)%mod = (a*x)%mod求逆元的过程就是解线性同余方程b*x ≡1(% mod)。详见代码:/*高斯消元的整个过程中不能出现负数*... 阅读全文
posted @ 2012-10-08 21:21 AC_Von 阅读(692) 评论(0) 推荐(0) 编辑
摘要: 周冬的《生成树的计数及其应用》论文上讲到过生成树计数的问题。用到的是一个Kirchhoff矩阵,它是这样定义的:a、设一个度数矩阵D,当i == j时,Dij = (i这个节点的度数),否则Dij = 0;b、设一个连通性矩阵A,如果i 和j连通,则Aij等于i到j的边数,否则Aij等于0;Kirchhoff矩阵C = D - A;有了Kirchhoff矩阵这个工具,我们可以引入Matrix-Tree定理:对于一个无向图G,它的生成树个数等于其Kirchhoff矩阵任何一个n-1阶主子式的行列式的绝对值(可以用高斯消元解,线性代数没学好的面壁去。。。-_-!)。所谓n-1阶主子式,就是对于.. 阅读全文
posted @ 2012-10-06 11:14 AC_Von 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 昨晚脑子发涨,代码写的跟坨屎的,到底没过,今天早晨来看了看,查了几个bug过了。。。纯模拟+LCA找最近公共祖先,需要注意的几个地方:1、出处顺序,可以用dfs输出,不过每个dfs里面要开一个vector<>,然后排序。2、b操作可能出现询问Mr.X,Mr.X的brother个数为13、c操作时LCA不能是他两个本身。可以开一个pre,如果是他俩中的一个,再往前找一个就可以了。200+行的渣代码:View Code 1 //#pragma comment(linker,"/STACK:327680000,327680000") 2 #include <io 阅读全文
posted @ 2012-09-26 08:29 AC_Von 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 分5种情况,模板转载自:http://hi.baidu.com/billdu/item/703ad4e15d819db52f140b0b题目大意:给你个简单多边形,和一个圆心在原点处的圆,求这个多边形与圆的重合部分的面积。也就是这个意思了……但是这看上去也太恶心了,怎么办?其实想一想就知道,我们平日求多边形面积用的就是三角形剖分,所以说我们应该化繁为简,通过求出来各三角形与圆的交,从而求出总面积。而且,剖分用的原点正好在圆心,这是很方便的一件事情。现在问题就转化成一个顶点在圆心的三角形了。但是这才是麻烦的开始,除去退化情况,我们应该至少考虑到以下五种情况:(一)三角形的两条边全部短于半径。最方 阅读全文
posted @ 2012-09-24 21:41 AC_Von 阅读(1237) 评论(0) 推荐(0) 编辑
摘要: 题意就是找森林里的LCA,构图完成了这个题基本就没问题了。已知的是所给的图上是可能有环的。那么可以对这些环进行类似缩点的操作(当然不是tarjan),设一个虚拟根0点,链接环上的每一个点。对于不在环上的点直接加无向边建树就行。预处理出每个环包含哪些点,每个环中点的顺序(环是有方向的)对得到的树进行LCA到RMQ的转化,同时记录当前点到0点的距离,O(nlogn)的时间预处理,O(1)的时间求LCA。分几种情况:1、两点的LCA是环上的同一个点,这个直接出结果(根据距离)2、两点的LCA在同一个环的不同点上,这个要根据环的方向判断一下优弧劣弧。3、两点的LCA不再同一环上。直接输出-1 -1;详 阅读全文
posted @ 2012-09-20 21:21 AC_Von 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 这神题,暴力数组可过,vector可过,线段树可过。。。时限拉的太长了,所以就成水题了。。。不过比赛的时候真的没敢用数组暴力写。。。说说线段树的思路吧。对树的每个节点 L, R, cnt, sum[5],分别表示左区间,右区间,这段区间上的点数,这段区间上sum[x%5]的和。先把所有的数据都读入,然后离散化,去掉重复的数据建树。再处理一边就可以了。ps:叶节点只有sum[0]需要更新,sum[1...4]更新不到。。这个注意理解。。View Code #include <iostream>#include <cstdio>#include <cmath># 阅读全文
posted @ 2012-09-18 20:43 AC_Von 阅读(347) 评论(1) 推荐(0) 编辑
摘要: 比赛的时候真心没想出来什么好的dp方法。。。蛋疼!整个比赛脑子发懵。。。!dp[i][j]表示到第j个人,i到j是一个group时说真话的最大人数。num[a][b]统计出说前面有a个,后面有b个的人的个数,当然,不超过n - a - b;dp[i][j] = max{dp[k][i]} + num[i][n-j];ans = max{dp[k][n]};ps:蛋疼的java.util.Arrays.fill(),妹的!内部函数就是一个for循环,只能初始化一维数组。。。表示以后再也不用了。。。import java.util.*;public class Main { /** ... 阅读全文
posted @ 2012-09-17 19:37 AC_Von 阅读(263) 评论(2) 推荐(0) 编辑
摘要: 矩阵快速幂。最外层的取模是1e9+7,第二层的取模 L1 = (1e9+7的循环节),第三层的取模是 L2 = (L1的循环节)暴力找出L2, L1, 然后矩阵快速幂即可。。。View Code #include <iostream>#include <cstdio>#include <cmath>#include <vector>#include <cstring>#include <algorithm>#include <string>#include <set>#include <fun 阅读全文
posted @ 2012-09-16 20:02 AC_Von 阅读(1131) 评论(0) 推荐(0) 编辑
摘要: 对于这个解法,网上题解一大堆。不过觉得还是算导官方给的解答好些,简洁又清楚。。。大概总结一下(不是翻译)=.=首先是排序。然后确定状态 f[i][j] (i >= j, i == j表示的只有n这个点) 表示 从i到1严格从右往左走然后再从1严格从左往右走到j 这样两条路径的最小值,当然[1, max(i, j)]区间上所有的点都是被访问过得。存在两种状态 :1: j < i - 1;dp[i][j] = dp[i-1][j] + Dis(i, i - 1);2: j == i - 1;dp[i][j] = min{dp[i][j], dp[j][k] + Dis(k, i)} / 阅读全文
posted @ 2012-09-15 16:16 AC_Von 阅读(1511) 评论(1) 推荐(0) 编辑
摘要: //其实这东西没有想像的那么复杂。。。//从java官网下载jdk,比我下载的事jdk6u31.bin。把jdk6u31.bin放到当前用户主目录下,当然这个随意,爱放哪放哪,能找到就行。//更改文件权限,不然不能执行chmod a+x jdk6u31.bin//执行./jdk6u31.bin//现在你之前确定的目录下有一个 jdk.1.6.0_31文件夹,里边就是jdk的各种lib,bin...//我把这个文件隐藏掉mv jdk.1.6.0_31 . jdk.1.6.0_31//下面就是修改环境变量,PASH, CLASSPASH, JAVA_HOME//打开环境变量配置文件sudo ... 阅读全文
posted @ 2012-09-13 19:11 AC_Von 阅读(592) 评论(3) 推荐(0) 编辑
摘要: A,B两个序列,每个元素表示一个长方形,问A中的长方形最做能覆盖多少个B中的长方形。(覆盖= (Ha >= Hb && Wa >= Wb))把A,B放到一个集合里,A的元素标记为1,B的元素标记为0,然后按h从大到小排序,h相等按w从大到小排序,h w都相等则A优先在前面。然后遍历整个序列。将A元素的w值放到set里面,碰到B元素的w值则在set里找第一个 >= wB的数,将这个数从set里删掉,结果累加1。。。ps: 关键字 multiset lower_bound 阅读全文
posted @ 2012-09-13 16:07 AC_Von 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题意很纠结。。。说的是1...n这些人登台,每个人有个吊丝值D[i],如果i号人第k个登台,那么他的愤怒值就是(k-1)*D[i]。现在有一个栈,可以先把i前边的人依次次进栈,然后让第i号人登台,然后在选择是栈里的同学登台还是i以后的同学登台,这样很多种情况会得到很多总愤怒值。求最小的总愤怒值。。。。 n<=100,暴力肯定不行。3^100....只能考虑dp,(贪心直接忽略-_-!)。想了半天一直在考虑怎么保存被访问的状态。。。所以从昨天晚上到今天一直没什么进展,无奈看了看解题报告。。设计思路确实很巧妙。。。 dp[i][j]表示区间[i, j]的最优值,设[i, j]上i是第k个访. 阅读全文
posted @ 2012-09-12 20:57 AC_Von 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 今年天津赛区网络赛的一道题,比赛的时候跟强哥讨论了一下,他的思路很明确,然后就让他去写了。。。赛后偶翻了翻这个题。。。额,还不错的状态dp把。。。就是让我给写搓了。。。贡献n次wa。。。 题目是给一下点之间的花费,构成一个图(图不是很大,最多100*100)。然后指定一些必须访问的点。并且这些点上有一个先花费Di再收入Ci的过程,问能否实现访问所有这些点。。。因为指定的点数最多为15,加上1号点最多才17,所以直接用状态压缩就可以。先用floyd找出任意两点间的最小花费。然后dp[status][pos]表示当前状态为status并且最后访问的点为pos时,所有的资金数。最后找一个dp[... 阅读全文
posted @ 2012-09-11 21:26 AC_Von 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 今天正式开学,第一天课安排的满满当当的。不过听了一天的课感觉没有一个老师在讲东西。。。东拉西扯两个小时过去。又是浪费的一天。=,= 网赛马上开始,记得去年被虐成渣了,今年估计也好不到哪里去。做了一年ACM,水平还是没提高多少。特别是赶上那种脑子进浆糊的时候,堪比猪脑!说没有压力那事不可能的,关键看自己怎么调整了。这周准备整理整理模版,看看以前的东西。把状态弄好,希望网赛的时候别进浆糊。。。。-_-! 阅读全文
posted @ 2012-09-03 20:33 AC_Von 阅读(217) 评论(1) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 18 下一页