11 2014 档案
摘要:烦。。早上在写HDU 4338,发现细节太多了,写不了。原因其实是自己对TARJAN算法忘得差不多了。唉。。把之前想的一道循环节的题过了吧。。。再练练Tarjan,把4338也过了,加油。。。#include #include #include using namespace std;char s[...
阅读全文
摘要:利用降幂公式。。呃,还是自己去搜题解吧。知道降幂公式后,就不难了。#include #include #include #include #define LL unsigned long long using namespace std;bool mod[100005];LL PHI(LL P){ ...
阅读全文
摘要:把两种状态化成2*n-2的一条线上的一种状态即可。很容易想到。高斯列主元法,不知为什么WA。要上课了,不玩了。。。逃了一次课呢。。#include #include #include #include #include #include using namespace std;double cons...
阅读全文
摘要:树状数组,主要是抓住要求连续1的个数。这样,初始时,相同的加1,不同的加0.查询时,用二分搜索右边界。就是比较当前mid-l+1的值与他们之间1的个数(这可以通过树状数组求区间和得出),记录右边界即可。#include #include #include #include #include #def...
阅读全文
摘要:本来以为是一道水题,好吧,做了才知道,出题的人有多牛。二分搜索是不可能的了,因为会超内存。。。看到别人的搜索两个集合的提示,我就自己一边去想了。终于想出来了:可以这样做,先把每两个集合的和值枚举出来并成一个大集合,排序,去重。剩下一个集合,于是,共三个集合。枚举小的那个集合的元素,搜索两个大的集合。...
阅读全文
摘要:一开始就想到了扩展KMP,因为只有扩展KMP才是处理后缀的。但忽然短路以为扩展KMP求的是最长公共后缀,囧。。。。又浪费了很多时间,都是对这个算法练得不多再看那个扩展KMP算法之后,就很确定要的就是这个算法了。嗯,如果直接用扩展KMP,是会超时的。后来看了别人一个很巧妙的处理,把一个串复制一下两个串...
阅读全文
摘要:顶好的一道题。其实,是POJ 2411的升级版。但POJ 2411我用的插头DP来做,一时没想到那道题怎么用状态DP,于是回头看POJ 2411那一道的状态DP,其实也很简单,就是每一行都设一个状态,用位来表示,如果上一行为0,则当前行必定是要竖着放的。填1.否则,当前行的位置可以横放填两个格子为1...
阅读全文
摘要:dp求期望的题。 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。E[1]即为所求。 叶子结点: E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i]] + 1); = ki*E[1] + (1-ki-ei)*E[...
阅读全文
摘要:概率DP期望,逆推即可。使用状态压缩。注意,要全部输出。。。看DIS才发现题目输出是个坑。。#include #include #include #include using namespace std;double state[(1=0;i--){ if(i==al){ state[i]...
阅读全文
摘要:很简单的概率题了设dp[x]为能力值 为x时出去的期望 天数#include #include #include #include #include using namespace std;double dp[20005];int ci[125];double is=0.5*(1+sqrt(5));...
阅读全文
摘要:很容易列出方程设dp[i][j]为排在第i位置,总共有j个人排队到达目标状态的概率i=1dp[i][j]=p4+p1*dp[i][j]+p2*dp[j][j]2kdp[i][j]=p1*dp[i][j]+p2*dp[i-1][j]+p3*dp[i-1][j-1]设p2=p2/(1-p1),p3=p3...
阅读全文
摘要:矩阵快速乘求概率,不难。但有注意的一点是,一定要注意地雷连着的情况,一旦出现两个雷相邻,就必定为0了。#include #include #include #include using namespace std;int pos[15];struct matrix{ double m[3][3];}...
阅读全文
摘要:方程很明显有d[i]=sum(pk*d[i+k])+p0*d[0];其中pi可以在开始时枚举求出。设d[i]=A[i]*d[0]+B[i],代入上式d[i]=(sum(pk*A[i+k])+p0)+sum(pk*B[i+k])+1可得A[i]=sum(pk*A[i+k])+p0B[i]=sum(pk...
阅读全文
摘要:求概率。其实跟枚举差不多,输入n即是要进行n轮比赛。对每一支球队,设求1的概率,首先1要与2比赛为p1,这是第一轮,第二轮时,1要与3(打败3为p2),4(打败4为p3)中胜者比赛,由于是概率,则两者都要比,求出概率。所以,1要在第二轮胜的概率=p1*(p2*3第一轮胜出的概率+p3*4在第一轮胜出...
阅读全文
摘要:考虑到有留在原地概率为1的情况,好吧,我直接把它置0.然后,真的过了。还是使用逆推。。#include #include #include #include #define N 1005using namespace std;double qi[N][N];double p[N][N][3];int...
阅读全文
摘要:简单的概率DP,求期望,逆推更好。#include #include #include #include #define N 100005using namespace std;double p[N];struct e{ int u,v; int next;}edge[1010];int head[...
阅读全文
摘要:开始时直接设了一个状态,dp[i][j]为发现i种bug,j个系统有bug的期望天数。但很错误,没能转移下去。。。。看了题解,设状态dp[i][j]为已发现i种bug,j个系统有bug,到完成目标状态所需要的期望的天数。妙啊,这样一设状态,就很好更解了。如,由dp[i][j]可以到达状态dp[i][...
阅读全文
摘要:一个很直观的想法是,求出每个点上下左右能到达的最大长度。然后枚举其斜边。。。没想到过了。。。。当然,题解有一个很巧妙的优化,利用树状数组,那个太巧妙了。#include#include#include#include#include#includeusing namespace std;int t,...
阅读全文
摘要:三个摄像头,在XOY上与立体的点求出在平面上的交点,然后求出凸包。三个凸包相交的面积即是所求,即是可以用半平面交的方法求解了。模板题了。代码拿别人的。#include#include#include#includeusing namespace std;const int mm=111;typede...
阅读全文
摘要:悬线法可解,稍有点烦琐。#include #include #include #include using namespace std;char map[1010][1010];int lefts[1010][1010],heights[1010][1010],rights[1010][1010];...
阅读全文
摘要:果然换个编译器就过了。总的来说,不难,不过就是处理一些空格。学习了一个新的类 istringstream可以按空格划分。然后,那条式子要理解。式子的意义是:找到一个串,该串在query中是第几个找到/它的实际位置。之和再除以给出的有几个串就是AVEP#include #include #includ...
阅读全文
摘要:http://www.cnblogs.com/staginner/archive/2012/08/13/2636826.html自己看过后两周吧,重新写了一遍。很受启发的。对于0、1,可以使用最小割的思想来做,以前有听说过0、1规划的问题,估计就是这样的了。对这个题目使用最小割 ,是一个非常巧妙的思...
阅读全文
摘要:很明显的区间加减单点查询。但由于规模大,于是离散化。在离散化的时候,可以把要查询的点也加入离散化的数组中。#include #include #include #include #define lowbit(x) ((x)&(-x))#define LL __int64using namespace...
阅读全文
摘要:直接DFS即可#include #include #include #include using namespace std;bool vis[2010];char map[2010][2010];struct e{ int u,v; int next;}edge[2050000];int head...
阅读全文
摘要:编辑距离,经典的了。动态规划枚举即过。#include #include #include #include using namespace std;char bgn[1505][15];char tmp[15];int dp[15];int main(){ int T,n,m,kase=0,e,c...
阅读全文
摘要:题意:给定a和b,n,让你求b+a, b+2*a, .......b+n*a里面有多少1.当统计第K位的时候 可以注意到 第 B+T*A 和 B+(T+2^(K+1))*A 位是相同的那么 第K位的时候 只需要统计2^(K + 1) - 1次就可以了 当统计第K位的时候 可以注意到 连续的 (2^K...
阅读全文
摘要:只需A的全部质因数包含在B中即可。#include #include #define LL __int64#include using namespace std;LL gcd(LL a,LL b){ if (b==0) return a; return gcd(b,a%b);}int main()...
阅读全文
摘要:可以知道,逃出的人中,最后一个应当是A+B最长的,这是很容易发现的。那么,最选逃出去的必定是A+B最短的。这符合最优。于是,可以把各小矮人按A+B的和由大到小排序。定义DP[i][j]为i个人中逃出了j个人至少需要“之前”的留在井中的未逃出去的小矮人的高度和。注意这个值是可以为负数的,是负数,则证明...
阅读全文
摘要:很明显的树形DP了。但网上有的说可以用并查集。。。。考虑一棵子树,当根结点有机器人时,则必定所有子树都要和根结点断开,而根结点向上返回的路径值则为其父结点与根结点连边的权值。当根结点安全时,假设其子树有K个危险结点,而由于K个结点需要两两不能相连,那么,至少断开K-1个结点。则把权值最小的K-1断开...
阅读全文
摘要:简单的一题,使用类DIJK的算法就可以了。#include #include #include #include using namespace std;struct Edge{ int u,v; double lose; int next;}edge[2500050];int head[50010...
阅读全文