自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

去做一个会思考,善于思考的人。

  • 博客(61)
  • 收藏
  • 关注

原创 hdu 3886 Final Kichiku “Lanlanshu” (数位dp)

http://acm.hdu.edu.cn/showproblem.php?pid=3886给出一个字符,只含'/','-' ,'\' ,表示着一个数上的各位数字按相应字符上升,不变或下降,问【a,b】区间内这样的数有多少个?数组很好设,dp[i][j][k]表示处理到第i位,它对应的字符是第j位,它前面的数字是k的种类数。令我纠结好久的是,我起初设的dp[i][j][

2014-08-29 21:30:38 978

原创 LightOJ 1205 - Palindromic Numbers (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1205求[i,j]区间内回文数的个数。为了使得处理到第pos位时,前面的状态是确定的,设置一个辅助数组num[ ]表示该回文数前mid位的数,根据前mid位数去确定后面的数。这样题目就变得简单了,只需再确定了回文数的长度,然后进行记忆化。dp[i][j]表示

2014-08-29 10:31:38 1396

原创 定理总结

做了不少数论题,还是感觉对数学

2014-08-29 08:55:41 673

原创 CF D. Beautiful numbers (数位dp)

http://codeforces.com/problemset/problem/55/DBeautiful Numbers : 这个数能整除它的所有位上非零整数。问[l,r]之间的Beautiful Numbers的个数。若一个数能整除它的所有的非零数位,那么相当于它能整除个位数的最小公倍数。因此记忆化搜索中的参数除了len(当前位)和up(是否达到上界),有一个prel

2014-08-29 00:24:03 3435

原创 LightOJ 1032 - Fast Bit Calculations (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1032问0~N内所有数的二进制形式中出现的连续的'11'的个数的和。与LightOJ 1140类似,都是对一个数内一些特征的数目计数,像一个数中'11'或'0'的个数和。设dp[i][j]表示处理到第i位时'11'出现的次数。不知道为什么数组开到dp[1

2014-08-28 19:39:41 1315

原创 LightOJ 1140 - How Many Zeroes? (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1140给出区间[m,n],求区间内的所有数共有多少个0。设dp[i][j]表示处理到第i位时,它前面共有j个0(除了前导零)。调试了半天,少些了一句 != -1。。#include #include #include #include #in

2014-08-28 10:44:50 1556

原创 LightOJ 1068 Investigation (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1068求出区间[A,B]内能被K整除且各位数字之和也能被K整除的数的个数。(1 ≤ A ≤ B 31 and 0 )算是最简单的数位dp了,k在这里是10000,三维数组都开不开。但是想想会发现A,B最多有10位,各位数字之和不会超过90,那么当 k >= 90时,就不用d

2014-08-27 21:06:41 1336

原创 poj 3252 Round Numbers(数位dp)

http://poj.org/problem?id=3252"Round Number "被称为其二进制形式中0的个数比1的个数多。求[x,y]区间内“Round Number”的个数。计数的时候最重要的是处理前导零,前导零不算数,因此与SCOI2009一样,增加一个标记变量first,标志着当前这意味是不是首位,不是首位的话1和0的个数都为0,否则根据枚举的1或0进行记忆

2014-08-27 19:34:22 987

原创 hdu 3709 Balanced Number(数位dp)

http://acm.hdu.edu.cn/showproblem.php?pid=3709平衡数。枚举支点的位置,同时记录力臂。dp[i][j][k]表示当前处理到第i个数,支点的位置是j,当前的力臂是k。因此判断某个数是否是平衡数,只需判断递归终点时力臂是否为0。#include #include #include #include #include #i

2014-08-27 13:49:38 785

原创 简单的数位dp

hdu 2089设dp[len][flag],flag = 1表示前一位是6,否则前一位不是6.#include #include #include #include #include #include #include #include #include #include #include #include #include #define LL __i

2014-08-27 10:50:56 1243

原创 ural Minimal Coverage (区间覆盖)

http://acm.timus.ru/problem.aspx?space=1&num=1303给出一些区间,选择尽量少的区间能覆盖到[0,m]。小白p154,典型的区间覆盖问题。一直在想怎么dp。。首先预处理,先按左端点从小到大排序,若左端点相同右端点从大到小排序,若区间x完全包含y,按照贪心的思想,y是没有意义的,有大区间可以选何必选择小区间。处理完事之后各个区间满足a1

2014-08-26 21:35:25 1018

原创 ural Binary Lexicographic Sequence (dp + dfs)

http://acm.timus.ru/problem.aspx?space=1&num=1081有一个二进制序列,定义为不能有两个连续的1出现,才是合法的。给出序列的长度n,求合法的二进制序列中按字典序排序后第k个序列是什么。设dp[i][0]和dp[i][1]分别表示第i位上是0和1的个数。那么dp[i][0] = dp[i-1][0] + dp[i-1][1];d

2014-08-26 16:31:14 810

原创 ural Mnemonics and Palindromes (dp)

http://acm.timus.ru/problem.aspx?space=1&num=1635给出一个字符串,将这个字符串分成尽量少的回文串。起初没有思路,想着应该先预处理出所有的回文串,然后进行dp。但是字符串的长度是4000,O(n^3)肯定不行,其实可以转化为O(n^2),就是枚举中点而不是枚举起点和终点,又NC了吧。然后就是线性的dp了。dp[i]表示到第i

2014-08-26 15:37:48 873

原创 ural Brackets Sequence (dp)

http://acm.timus.ru/problem.aspx?space=1&num=1183很经典的问题吧,看的黑书上的讲解。设dp[i][j]表示i到j括号合法需要的最少括号数。共有四种情况:s[i]s[j]配对,dp[i][j] = min( dp[i][j] ,  dp[i-1][j+1] );s[i] = '('或'[' dp[i][j] = min( d

2014-08-26 10:40:26 770

原创 ural False Mirrors (状态压缩+记忆化搜索)

http://acm.timus.ru/problem.aspx?space=1&num=1152有n个阳台围城一圈,每个阳台都有若干个怪兽,一次可以打三个相邻的阳台上的怪兽,它们就会全部死去,但攻击者会受到没有死去怪兽的攻击,每个怪兽的攻击是1unit,问最后攻击者受到的最小伤害。n 1次WA,1次TLE。WA是没看透题意,我判断的递归终止的条件是怪兽数目小于等于

2014-08-25 20:43:38 920

原创 ural Threeprime Numbers(dp)

http://acm.timus.ru/problem.aspx?space=1&num=1586题意没看懂,看了别人的翻译。threeprime number的意思是任意三个连续的数组成的一个三位数是素数,注意必须是三位数。给出n,问满足条件的n位数有多少个。先把三位数的素数筛选出来并标记,设dp[i][j][k]表示到i位为止,最后两位是j和k的满足条件的数的个数。

2014-08-25 19:12:06 950

原创 ural Bicolored Horses(二维dp)

http://acm.timus.ru/problem.aspx?space=1&num=1167有n个马,黑白两种,依次放入k个马厩,将x匹马放在一个马厩的不快乐值为黑马数目*白马数目。问最后的不快乐值最小是多少?设dp[i][j]表示前i个马厩放了j匹马的最小不快乐值,那么dp[i][j] = min(dp[i-1][g]+tmp[g+1][j])。其中tmp是预处

2014-08-25 16:55:16 893

原创 poj 2750 Potted Flower(线段树区间合并)

http://poj.org/problem?id=2750有n个数围成一个圈,每次可以将a位置上的数变为b,对每个操作,输出区间的最大连续子段和,连续的子段长度不能超过n。区间合并问题,因为是求连续子段的和。先把圈从1和n之间断开,变为一条链,先在链上求最长连续的和。这个最长连续的和取左节点最长连续和,右节点最长连续和,左节点从右边数最大连续和加上右节点从左边数最大连续和

2014-08-25 10:00:46 1204

原创 L - Colourful Rectangle(面积并加强版)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/L花了两个多小时才写完,结果一直RE。我用1 2 4表示三原色,结构体里有两个信息:sta(1~7)表示这段区间的颜色状态,len[8]表示这段区间每种颜色的长度。后来想想这样处理不对,因为同一区间可能会被同一种颜色多次覆盖。但是我在sta中

2014-08-24 16:01:44 897

原创 V - Ice-cream Tycoon(线段树)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/V有两种操作,ARRIVE a b 表示单价为b的冰激凌的进货数目为a,BUY a b表示同学共拿b元钱,想买a个尽量便宜的冰激凌,若能购买到,输出"HAPPY",否则输出"UNHAPPY”操作挺简单,单点更新然后push_up。但是写起来感

2014-08-23 20:50:58 911

原创 X - Calculate the Function(线段树+矩阵)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/X给出一个序列,在区间[l,r]内定义一个函数f(x),其中f(l) = a[l],f(r) = a[r],f(x) = f(x-1) + f(x-2)*a[x](x >= l+2)。对于每一个询问区间[l,r],输出f(r)。刚

2014-08-23 15:55:13 848

原创 多校补题

做了几场多校下来,发现自己的思维太狭隘,不够灵活,思考的方向不正确,感觉越来越受限制。多刷点cf没坏处。http://acm.hdu.edu.cn/showproblem.php?pid=4961给出一个序列a[],若a[i]前面有它的倍数,那么将b[i]赋值为离他最近的那个倍数,否则赋值为a[i],若a[i]后面有它的倍数,那么将c[i]赋值离他最近的那个数,否则赋值为a[i

2014-08-23 10:09:04 871

原创 hdu 4973 A simple simulation problem.(线段树)

http://acm.hdu.edu.cn/showproblem.php?pid=4973有两种操作D l r 将【l,r】区间翻倍Q l r询问[l,r]中相同数字出现的最多次数比赛的时候脑子太乱了,没有想到怎么做。发现每次翻倍序列的长度都在变化,区间对应的数也在变,没有思路。但是静下心来想一想,思路还是挺清晰的。无论怎么翻倍,序列中的数都是连续的,范围

2014-08-22 23:22:49 1131 4

原创 hdu 4288 Coder

http://acm.hdu.edu.cn/showproblem.php?pid=4288初始有一个空集合,有N个操作,1 add x向集合中加一个元素x,2 del x在集合中删除一个元素x,sum询问下标mod 5为3的元素的和。建立一棵线段树,能够实现数组中元素的删除和添加,维护区间的和。重点是怎么在元素随时变动的条件下求下标mod 5 为3的数的和。首先节点有

2014-08-21 09:51:04 771

原创 E - Mex

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/E又是一道线段树神题。对一个非负序列,定义mex(i,j)为区间[i,j]内没出现最小的正整数。求所有满足(1 以序列1 2 0 4 6 3 5 7 1 2 4 5 8为例,先把以i = 1的mex(1,j), i = 2的mex

2014-08-20 18:48:01 1061

原创 G - Vases and Flowers(线段树+二分)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/G有n个花盆编号0-n-1,初始都没有种花,有两种操作:1 a b 从a开始种花,但a处不一定能种,要种b朵花,若花盆中已种花就跳过不种,直到n-1,若b朵花种不完就扔掉,输出种b朵花的花盆左右端点。2 a b要清理[a,b]的花盆,先输

2014-08-20 11:18:55 807

原创 hdu 4578 Transformation

http://acm.hdu.edu.cn/showproblem.php?pid=4578又做了一道好题。。有三种操作:1 a b c [a,b]加上c2 a b c [a,b]乘上c3 a b c [a,b]变为c4 a b c 求[a,b]的c次方和(1这题首先需要解决的第一个问题是加上或乘上一个数对这个区间的c次方和分别产生什么改变,很简单,一化

2014-08-19 21:49:23 1091

原创 hdu 3379 Sequence operation(成段更新,区间合并)

http://acm.hdu.edu.cn/showproblem.php?pid=3397线段树很好的题。涉及到的知识点:lazy操作,区间合并。有五种操作:0 a b 将[a,b]变为01 a b 将[a,b]变为12 a b 将[a,b]取反3 a b 输出[a,b]的1的个数4 a b 输出[a,b]内最长的连续1的个数对区间的操作与poj 3225

2014-08-18 19:19:48 971

原创 poj 3225 区间(区间的交并补操作)

http://poj.org/problem?id=3225一道题又做了一天。。这道题对我来说起初有N多难点。1:区间的开闭如何解决。、2:怎样把区间的交并补、对称差转化为对线段树的操作。后来与实验室的同学讨论了后解决了前面两个问题。对于区间的开闭,可以将区间放大一倍,偶数点表示端点,奇数点表示区间内线段,前开的话左端点加1,右开的话右端点减1。例如[1,3]可以表示成

2014-08-17 20:24:39 2203 1

原创 T - Can you answer these queries?(单点更新,线段树优化)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/T对n个整数有m个操作,共有两种操作:0 l r表示把区间[l,r]之间的数开方,1 l r表示询问[l,r]的和。开方即单点更新。但所有的数都单点更新和模拟每什么差别。重点就是成段维护区间的和,因为当操作次数相当多时,这些数大部分就

2014-08-16 19:53:43 783

原创 hdu 1255 覆盖的面积(扫描线)

http://acm.hdu.edu.cn/showproblem.php?pid=1255一道挺简单的题,让我折腾了许久。主要卡在了更新节点后维护父亲节点上。后来思路明确了就很容易了。节点信息:l,r:区间端点cnt:区间被覆盖的次数,cnt = 0说明没有被完全覆盖。len1:区间被覆盖的长度len2:区间至少被两条线段覆盖的长度。只要找到父亲节点与

2014-08-16 19:19:15 945

原创 U - Count the Colors(成段更新+统计)

http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=216#problem/U有n个操作,每个操作定义为x1,x2,c,表示把区间[x1,x2]染成c色,区间可重复染色,最后问每种颜色存在几个间断的区间中。注意是对区间进行染色,而不是点。成段更新很简单,在统计每种颜色所在间断的区间时,先把线段树中节点信息

2014-08-15 19:36:37 837

原创 poj 1177 Picture(扫描线+矩形周长并)

http://poj.org/problem?id=1177求矩形的周长并,明确的一点是对于覆盖的边的长度忽略不计。与求面积并类似,首先离散化,对矩形的每条横边从下往上扫描。扫描过程中要完成三个任务,更新相应的区间信息,求横边长,求竖边长。节点信息:l,r:左右区间编号cnt:表示该区间是否被完全覆盖。cnt > 0 表示完全覆盖,否则不完全覆盖。lp,rp

2014-08-15 13:24:48 1247

原创 poj 2531 Network Saboteur(随机化)

http://poj.org/problem?id=2531

2014-08-14 19:21:13 619

原创 hdu 4941 Magical Forest(Map)

http://acm.hdu.edu.cn/showproblem.php?pid=4941因为地图的行和列很大,操作次数也很多,直接循环模拟肯定不行。但可以用map映射一下,当交换行和列的时候,直接交换它们的映射值,直接O(1)进行交换。#include #include #include #include #include #include #include

2014-08-13 19:35:12 1050

原创 hdu 1695 GCD(欧拉函数+容斥原理)

http://acm.hdu.edu.cn/showproblem.php?pid=1695很经典的题,同时感觉也很难。在区间[a,b]和[c,d]内分别任意取出一个数x,y,使得gcd(x,y) = k。问这样的(x,y)有多少对。可以认为a,c均为1,而且gcd(5,7)与gcd(7,5)是同一种。因为gcd(x,y) = k,那么gcd(x/k,y/k) = 1,也就是求

2014-08-13 17:34:34 1064

原创 鸽巢原理简单应用

http://poj.org/problem?id=2356从n个数里面取出一些数,这些数的和是n的倍数。并输出这些数。先预处理出前n个数的和用sum[i]表示前i个数的和。若某个sum[i]是n的倍数,直接输出前i个数即可。否则说明n个数中对n取余的结果有n-1种,即余数为(1~n-1),根据鸽巢原理知必定至少存在两个sum[i]与sum[j]对n取余的结果相等。那么

2014-08-12 20:27:35 1926

原创 poj 3243 Clever Y&&hdu 2815 Mod Tree(扩展baby_step)

http://poj.org/problem?id=3243求A^x = B(mod C) ,C是任意的数。框架都在这里了:http://hi.baidu.com/aekdycoin/item/236937318413c680c2cf29d4理解:http://blog.csdn.net/ivan_zjj/article/details/7597109#in

2014-08-12 10:40:35 981

原创 poj 2417 Discrete Logging(A^x=B(mod c),普通baby_step)

http://poj.org/problem?id=2417A^x = B(mod C),已知A,B,C,求x。这里C是素数,可以用普通的baby_step。在寻找最小的x的过程中,将x设为i*M+j。从而原始变为A^M^i * A^j = B(mod C),D = A^M,那么D^i * A^j = B(mod C ),预先将A^j存入hash表中,然后枚举i(0~M-1

2014-08-11 21:13:30 1313

原创 hdu 2837 Calculation(指数循环节)

http://acm.hdu.edu.cn/showproblem.php?pid=2837不是自己想出来的。

2014-08-11 17:24:21 769

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除