03 2014 档案
摘要:1437记忆化 模拟倒水过程 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 25612 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;15 const double pi = acos(-1.0);16 const double inf = ~0u>>2;17 bool
阅读全文
摘要:链接这题最不好求的一部分是rank部分 因为top每次都是把一个数放在队头 不会穿插在数组里 也就是说后面没有top过的一部分数 依旧保持有序这样可以分为两部分来处理 比如 1 2 3 4 5 6 7 TOP 3 TOP 5 TOP 7后 会是这么一种状态 7 5 3 1 2 4 6 这样可以建立两颗线段树一个处理前面一个处理后面对于N 值很大 肯定是需要离散化的 前面的那颗就可以用普通的求第k大 标记 求和来求出第几 以及x在哪个位置 后面的线段树的值 可以这么来表示 s[w] = num[i]-num[i-1]这样对于询问rank x 就用线段树找第一个大于等于x的数。虽然错了很多次,看.
阅读全文
摘要:写份DIV2的完整题解A判断下HQ9有没有出现过 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 11212 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;15 const double pi = acos(-1.0);16 const double inf = ~0u>>
阅读全文
摘要:好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。其中,结果的那个4等于2*2+0*1:下面的算式则是一个1 x 3的矩阵乘以3
阅读全文
摘要:链接构造矩阵 快速幂求解构造矩阵a[i]为每个cati所拥有的花生总数 这里多加一维用来求和,具体是怎么求得可以看下面的一组例子 假设有3个cat a[] = {1,0,0,0}构造单位矩阵来保存操作后的解 为什么要是单位矩阵?因为单位矩阵乘以任何矩阵还是原矩阵 这样在单位矩阵上改变要操作的那列(这里用列来表示i只猫的花生数)就能保留下来不被改变的猫的花生数对于g 1(1,0,0,0)*{1,1,0,0 0,1,0,0 0,0,1,0 0,0,0,1}这样得出结果(1,1,0,0} 也就是说对于g1 就让mat[0][i]+1就可以了 因为加了k 最后都会变成a[...
阅读全文
摘要:链接也是矩阵经典题目 二分递归求解a+a^2+a^3+..+a^(k/2)+a^(k/2+1)+...+a^k = a+a^2+..+a^k/2+a^k/2(a^1+a^2+..+a^k/2)(偶数)a+a^2+a^3+..+a^(k/2)+a^(k/2+1)+...+a^k = a+a^2+..+a^k/2+a^k/2(a^1+a^2+..+a^k/2)+a^k。奇数 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using names.
阅读全文
摘要:链接矩阵经典题目利用矩阵的快速幂取模 快速的求得解其实它题目已经给的很明显了 下面再描述一下过程f(n) 1 1 f(n)+f(n-1)f(n-1) 1 0 f(n)左边乘中间的变成右边的 然后可以看出右边的已经变成了 f(n+1) f(n) 那么乘上k次上面那个10矩阵 就得到了f(n+k) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 212 #define LL...
阅读全文
摘要:利用快速幂的思想 根据矩阵的结合律 可以递归二分求解 struct Mat{ int mat[N][N];};int n;Mat operator * (Mat a,Mat b){ Mat c; memset(c.mat,0,sizeof(c.mat)); int i,j,k; for(k =0 ; k >= 1) { if(k&1) c = c*a; a = a*a; } return c;}
阅读全文
摘要:链接A,B为最快和次快有两种方式可以使c,d过桥一是a与c一起走,a回来接d再与d一起走,一直到对岸人为0为止而是 a与b一起走 a回来送灯 c与d一起走 b回来送灯 重复此过程。只剩2人时 直接过桥3 人时 A回来送灯 ac走 a回来送灯 ab走 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 101012 #define LL long long13 #define IN.
阅读全文
摘要:链接利用log函数来求解 n! 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 using namespace std;12 #define N 10000013 #define LL long long14 #define INF 0xfffffff15 const double eps = 1e-8;16 const double pi = acos(-1.0);17 const double inf = ~0u>>2;18
阅读全文
摘要:math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有:1 三角函数double sin (double);double cos (double);double tan (double);2 反三角函数double asin (double); 结果介于[-PI/2, PI/2]double acos (double); 结果介于[0, PI]double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI/2]3 双曲三角函
阅读全文
摘要:接触ACM已经两年多,认真及热情度呈现一种抛物线趋势(开口向上的)而非指数曲线形势,不知不觉在这里的时间已接近尾声,感觉有点遗憾。 用这一个多月的时间来加倍的努力准备省赛,只记得自己唯一一次特别认真的准备是去年长沙赛之前,可惜还是没能抱银归来。那时cui大神还在,虎哥还在,感觉心里充满了向前冲的劲,或许时间有点短吧,有那么2个队友与你一起奋战感觉是很好的。现在两位都不在实验室了,自己的状态感觉受到了些许影响,做什么题也没有一起讨论的,想到比赛更是不知道怎么面对,有时会看到别人的博客,三人一起不顾时间的刷题,每天谈的也是题,真的很羡慕。但现在听到的越来越多的话是与题目无关的,与ACM无关的...
阅读全文
摘要:矩阵快速幂的模板矩阵的知识太多了,这里贴出一部分常用的。 矩阵的加法运算满足交换律:A+B=B+A[4]。矩阵的转置和数乘运算对加法满足分配律:(A+B)TAT+BTc(A+B)cA+cB 矩阵加法和数乘两种运算使得成为一个mn维的实数线性空间。而转置和数乘运算满足类似于结合律的规律:c(AT)(cA)T.矩阵的乘法满足结合律和对矩阵加法的分配律(左分配律和右分配律):结合律: (AB)CA(BC),左分配律:(A + B)CAC+BC,右分配律:C(A + B)CA+CB.矩阵的乘法与数乘运算之间也满足类似结合律的规律;与转置之间则满足倒置的分配律。c(AB)(cA)BA(cB)(...
阅读全文
摘要:链接二分时间,在时间内dp[i][j]表示截止到第i个人已经做了j个A最多还能做多少个B#include #include#include#include#include#include#include#include#includeusing namespace std;#define N 200000#define LL long long#define INF 0xfffffffconst double eps = 1e-8;const double pi = acos(-1.0);const double inf = ~0u>>2;int a[55],b[55];int d
阅读全文
摘要:01背包 加上每次更新解题数目最多 总用时最少 因为要保证用时最少,要先把时长由小到大排序。没排序 WA了几小时。。链接 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 using namespace std;12 #define N 101013 #define LL long long14 #define INF 0xfffffff15 const double eps = 1e-8;16 const double.
阅读全文
摘要:链接开两个队列 一个维护价格从大到小用来每次更新买油的价格 让每次都加满 如果当前价格比队列里的某价格低的话就更新 另开以优先队列维护价格由小到大来更新此时用的油是什么油价的 并减掉 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 10001012 #define LL long long13 #define INF 0xfffffff14 const double eps .
阅读全文
摘要:高斯第一篇poj1222EXTENDED LIGHTS OUT状压枚举法 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 using namespace std; 11 #define N 100000 12 #define LL long long 13 #define INF 0xfffffff 14 const double eps = 1e-8; 15 const double pi = acos(-1.0); ...
阅读全文
摘要:链接之前队内赛中的一道题目 当时怎么想也没想到,就一直放到了今天,刚才看另一题的讲解突然看到时拿这个题作为引子来讲的,就仔细看了下。参考《《具体数学》》 p7。 Josephus问题开始是讲了一个古老的故事,说J和同伴陷入险境,大家不愿做俘虏,就想了个游戏来进行自杀,每第二个人就要去死。。J觉得这样很傻,并很快的算出了自己该在的位置,逃脱了这无聊的自杀。由此引出了这个有趣的算法。这本书上讲的很清楚, 我就大体概括一下。可以先从10个人来看 很明显第一次死掉的是全部的偶数, 然后是 是3 7 1 9.那么J(10) = 5;可以猜测所有的J(n)都为奇数,因为第一轮就杀掉了全部的偶数,很明显。。
阅读全文
摘要:以为是组合,后来看着像数位dp,又不知道怎么让它不重复用。。然后就没思路 了。其实状压就可以了 状压是可以确定一个数的使用顺序的 利用01也可以确定所有的数的使用以及不重复dp[i+1《《e][(j*10+p[e])%m]+=dp[i][j]; 排下序去掉重复的 或者最后除去每个数出现的次数 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 10000012 #define L.
阅读全文
摘要:ZOJ 3605大体意思就是 找出随机选了K个交换后 石子在第i个罐子里的概率最大也就是可能的总数最大 这样就可以写出递推方程 dp[i][j][k] += dp[i-1][e][k]; (0 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 10000012 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;
阅读全文
摘要:对于数论 首先要提的当然是素数了 先从素数开始 这里的题目大部分来自网上一大神的数学题的总结 自己挑了一部分拿来练习POJ 2689Prime Distance经典的区间素数筛选一般看题的时候重点会看下数据范围 这题明显告诉你了l u 差不超过100W 那就想到可以从这里入手 对于100W内的素数我们是可以很快筛出来的 21Y就不太可能了所以可以转换下 先把47000内的素数打表筛出来 然后再用这些素数去筛 l-u内的素数 筛法与筛小的类似 因为差不超过100W 所以是可以很快解决掉的注意一下 有1的情况吧 1 #include 2 #include 3 #include 4 #includ.
阅读全文
摘要:一直不大喜欢写题解 尤其做的很纠结的题目 终于纠结完了 就想代码一贴完事。缺点一:理解不透彻;二:很容易忘;三:不利于以后回顾复习;四:写代码容易乱;以这个专题为开始吧 把一些题目总结一下 解释一下 同一类型的放在一块 。hdu1465不容易系列之一(错排公式)虽说大家知道 还是把这个小小说一下来自百度百科当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置
阅读全文