08 2017 档案

摘要:题意:找0到B中权值小于等于A权值的数目(权值按每个位数上的二进制计算) dp[i][j] i-长度为i,j-权值,dp[i][j代表长度为i,小于j的个数 刚开始把j代表f(x),但是当a,不同时,dp结果不同这样会超时 #include<bits/stdc++.h> #define C 0.57 阅读全文
posted @ 2017-08-26 13:48 walfy 阅读(126) 评论(0) 推荐(0)
摘要:这一场真的是血崩,a,b都被hack,还好结束前重交都过了 A:题意:找出得到k个不同的字符,所要更改的最小字符数 题解:首先如果k>字符串长度,直接impossible,然后直接记录一下不重复的有多少个,如果不重复的个数比k小,输出k-不重复的个数,否则输出0(就是这里被hack) #includ 阅读全文
posted @ 2017-08-25 10:39 walfy 阅读(189) 评论(0) 推荐(0)
摘要:这题不是用10进制储存的,要转化成2进制再计算 dp[i][j][k] i是位数,j是1的个数,k是0的个数 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #i 阅读全文
posted @ 2017-08-24 10:51 walfy 阅读(166) 评论(0) 推荐(0)
摘要:dp[i][j][k] i-i位数,j-开头是j,k-除13的余数 要注意数位dp的时候一定不能直接判断对的来做,必须是判断不对的,然后用全部减 这一题先算出所有%13==0的个数,然后算出所以%13并且不含13的个数,然后相减就是答案了 #include<bits/stdc++.h> #defin 阅读全文
posted @ 2017-08-23 18:55 walfy 阅读(208) 评论(0) 推荐(0)
摘要:题意:求从l到r中的数能被自己的每一位整除的有多少个 如果x满足条件,那么 x %lcm{digit【i】}==0,又因为digit【i】只可能为1-9,lcm{1,,,9}=2520,所以x%2520%lcm{digit【i】}==0,这样只需存x%2520,节约了空间和时间 从1到10的最小公倍 阅读全文
posted @ 2017-08-23 16:23 walfy 阅读(225) 评论(0) 推荐(0)
摘要:题意:求1到n的数中含49的有多少个 和上一题类似,但是这题如果直接算含49的会有一点问题,所以先算不含49的然后用n-就好了,注意求1到n算的是n+1的 还有就是这题有毒,必须要用__int64而不能用long long,而且需要交c++,不能用G++ 非递归 #include<map> #inc 阅读全文
posted @ 2017-08-23 13:12 walfy 阅读(124) 评论(0) 推荐(0)
摘要:数位dp第一题 题意:找从n到m中,不包含4,62(连续)的个数 先预处理出f数组 f[i][j]是以j开头的i位数不包含4,62的个数,可通过递推求解 递推关系式为: f[i][j]=f[i-1][k]+f[i][j];对于第i位,可由第i-1位转移过来,用k枚举第i-1位的所有情况,j枚举第i位 阅读全文
posted @ 2017-08-23 10:44 walfy 阅读(164) 评论(0) 推荐(0)
摘要:A题,读错题意,坑了好久,大于d的橘子不用加,每次总和大于b之后就要清空,然后答案加1 #include<bits/stdc++.h> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define pii pair 阅读全文
posted @ 2017-08-22 20:50 walfy 阅读(149) 评论(0) 推荐(0)
摘要:A题,每次输入的时候记录,保留上一个的值,做差判断 #include<bits/stdc++.h> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls 阅读全文
posted @ 2017-08-22 09:33 walfy 阅读(149) 评论(0) 推荐(0)
摘要:可以转变成上一题(hdu1542)的形式,把每条线段变成宽为1的矩形,求矩形面积并 要注意的就是转化为右下角的点需要x+1,y-1,画一条线就能看出来了 #include<bits/stdc++.h> #define pi acos(-1.0) #define ll long long #defin 阅读全文
posted @ 2017-08-18 18:23 walfy 阅读(238) 评论(0) 推荐(0)
摘要:参考博客: http://blog.csdn.net/xingyeyongheng/article/details/8927732 总的来说就是用一条(假想的)线段去平行x轴从下往上扫描,扫描的过程中更新下底边的个数和长度综合(用线段树维护) 因为x的值可能会很大,所以就要用Hash表来进行离散化, 阅读全文
posted @ 2017-08-18 17:26 walfy 阅读(207) 评论(0) 推荐(0)
摘要:第一题花的时间有点多 A,注意考虑0,15的极端情况就好了,还有只有一个数的未知情况 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdi 阅读全文
posted @ 2017-08-18 12:56 walfy 阅读(171) 评论(0) 推荐(0)
摘要:A题有点坑,不能只用a,b,c其中一个来算(因为有可能出现a,b,c其中几个很大的情况),每次必须有a,b,c的情况 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector 阅读全文
posted @ 2017-08-17 17:56 walfy 阅读(150) 评论(0) 推荐(0)
摘要:A题有点水,但是花了10分钟才a掉,把%10的先加一,处理成字符串再减一 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #in 阅读全文
posted @ 2017-08-17 13:57 walfy 阅读(145) 评论(0) 推荐(0)
摘要:dp[i][j] 第i轮得分为j的情况sum为dp[i-1][j]的前缀和dp[i][j]= ∑dp[i-1][l](l-2*k<j,j<l+2*k) 最后枚举的时候只需要记录从0到2*k*t的dp和偏移和(即最后的sum)的乘积 #include<map> #include<set> #inclu 阅读全文
posted @ 2017-08-16 15:23 walfy 阅读(201) 评论(0) 推荐(0)
摘要:先floyd预处理一遍dis,枚举所有状态,dp[ i ] [ j ]表示 以 j 为终点的状态 i 使用最小的时间 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector 阅读全文
posted @ 2017-08-15 12:41 walfy 阅读(260) 评论(0) 推荐(0)
摘要:枚举灯的所有可能状态(亮或者不亮)(1<<20)最多可能的情况有1048576种 dp【i】表示 i 状态时灯所能照射到的最远距离(i 的二进制中如果第j位为0,则表示第j个灯不亮,否则就是亮) 当i&(1<< j)时代表第i个状态灯j不亮,此时可由状态i转移到状态 i ^ ( 1 << j) 即d 阅读全文
posted @ 2017-08-14 19:27 walfy 阅读(245) 评论(0) 推荐(0)
摘要:KMP,先预处理按每个节点标记,扫一遍更新每个匹配位置,最后kmp判断是否有重合而且不相同的地方 注意处理细节,很容易runtime error #include<map> #include<set> #include<cmath> #include<queue> #include<stack> # 阅读全文
posted @ 2017-08-14 15:36 walfy 阅读(185) 评论(0) 推荐(0)
摘要:二分比较容易想到 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #include<cassert> #include<ioma 阅读全文
posted @ 2017-08-14 08:52 walfy 阅读(216) 评论(0) 推荐(0)
摘要:当两个门锁相同时,这个钥匙必须用,不同时分开用 可以直接遍历门,当然二分更快 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> # 阅读全文
posted @ 2017-08-10 09:44 walfy 阅读(140) 评论(0) 推荐(0)
摘要:这题就是找合取范式比较麻烦 AND 1 0必须取自己来造成矛盾,1必须取1 AND 0 1必须取0 OR 1 0必须取1 OR 0 1必须取自己来造成矛盾 XOR 1 0必须取1,1必须取0 XOR 0 1必须取1,0必须取0 然后就是tarjan扫一遍判断 #include<map> #inclu 阅读全文
posted @ 2017-08-09 09:34 walfy 阅读(180) 评论(0) 推荐(0)
摘要:tarjan缩点,拓扑排序染色输出(貌似挑战上面没有拓扑啊,而且这样写还过了= =) 主要是找s,t,d,三者之间的关系,找出合取范式这题就很容易了 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> 阅读全文
posted @ 2017-08-08 16:32 walfy 阅读(166) 评论(0) 推荐(0)
摘要:tarjan扫一遍后直接判断 最关键的地方就是建边(x[i] <= x[j] && y[i] >= x[j] && y[i] <= y[j]) || (x[i] >= x[j] && x[i] <= y[j] && y[i] >= y[j]) 建边条件:x[ i ] < = x [ j ] < = 阅读全文
posted @ 2017-08-08 14:10 walfy 阅读(187) 评论(0) 推荐(0)
摘要:这篇博客讲解的很详细了,求区间最大值也可以用st表,时间复杂度O(n log(n)),查询复杂度O(1) 主要是用到区间动规 的思想(虽然我不会区间动规= =) 在求解rmq问题时,st表是很有用的 ********************** 要注意的是st表只能离线处理,要在线处理必须要用树状数 阅读全文
posted @ 2017-08-07 19:01 walfy 阅读(219) 评论(0) 推荐(0)
摘要:用lucas定理, p必须是素数 对于单独的C(n, m) mod p,已知C(n, m) mod p = n!/(m!(n - m)!) mod p。显然除法取模,这里要用到m!(n-m)!的逆元。 根据费马小定理: 已知(a, p) = 1,则 ap-1 ≡ 1 (mod p), 所以 a*ap 阅读全文
posted @ 2017-08-06 14:29 walfy 阅读(198) 评论(0) 推荐(0)
摘要:花了6个小时,终于成功ac。。。。。。 两边dfs,第一遍求子树和,第二遍判断有没有2*t【s】/3和t【s】/3,因为要求的节点可能是在同一条线上,同时要有2*t【s】/3和t【s】/3的情况,且2*t【s】/3距根节点更近 还要注意的是如果同一条线上有两个t【s】/3的点是行不通的,必须要在两个 阅读全文
posted @ 2017-08-04 15:24 walfy 阅读(310) 评论(0) 推荐(0)
摘要:A,连续的1的个数就是每个位置上的数,注意0的处理,最后一个0不用删除 #include<map> #include<set> #include<cmath> #include<queue> #include<stack> #include<vector> #include<cstdio> #inc 阅读全文
posted @ 2017-08-02 12:04 walfy 阅读(147) 评论(0) 推荐(0)
摘要:直接套公式+ 假设除去第k个人。 0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 //original sequence (1) 0, 1, 2, 3, ..., k-2, , k, ..., n-1 //get rid of kth person (2) k, k+1 阅读全文
posted @ 2017-08-02 08:47 walfy 阅读(222) 评论(0) 推荐(0)