自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jason

博客搬家了,欢迎移步:www.jiesheng.asia与我讨论

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

原创 【CodeForces】343D Water tree (线段树好题!还未弄懂)

/*此题的方法除了用线段树求子树,通过标记父亲,更新儿子的方法,来更新祖先,学习了。对于建树的方法由于并没有说明父亲与儿子的顺序,所以需要通过两次添加。并且pre变量可以获得父亲的位置,还未弄懂!*/#define _CRT_SECURE_NO_WARNINGS#include<cstring>#include<cstdio>#include<iostream>#include<al

2015-02-26 22:24:18 1164

原创 【POJ】3321 Apple Tree(DFS树的应用)

题目大意:这边给一棵苹果树,每个节点可以生出多个分支,每个分支可以有0或者1个苹果 现在给出每个节点与分支的情况。以及相应的操作。 思路: 一开始确实是看懵了,想不到为什么是线段树或者是树状数组,这边给的是一棵树,而线段树或者树状数组都是一维数组,所以这边就涉及到一个将树转换成一维数组的方法,便是对树进行dfs。详细看代码吧,初学也不知道怎么表达感悟,等以后加深印象再多写一点内容吧。 线段树

2015-02-25 17:34:42 609

原创 【POJ】1171 求矩形并的周长(线段树+扫描线+离散化)

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cmath>using namespace std;#define MAX 10010#define ls rt<<1#define rs ls|1#define

2015-02-23 20:07:31 765

原创 【POJ】1151 Atlantis(线段树+扫描线+离散化)

题目大意:给若干个矩形,每次给的是矩形对角两个点的坐标,求所有矩形并起来的面积。 线段树扫描线典型题:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define MAX 220#defin

2015-02-22 17:54:07 634

原创 【HDU】5175 Misaki's Kiss again(反异或|搜索匹配因子做法)

思路:求出n的所有因数 然后设m=n^p[i],p[i]是n的因子,就会得到原来的数,反异或即可。 AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;long long p[10000];long long mid[1

2015-02-14 21:36:58 597

原创 【POJ】3468 (线段树,区间成段按需更新)

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX 100100#define ls rt<<1#define rs ls|1#define m (r+l)>>1long long sum[MAX << 2]

2015-02-14 16:49:23 438

原创 【Fzu】2150 Fire Game(BFS)

先判断连通性,然后选择两个点进行BFS,最终时间比一下大小即可,AC时间是1s刚刚好过了。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<queue>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;char mz[12][

2015-02-12 18:17:47 514

转载 【POJ】1426 Find The Multiple(暴力|同余模定理|BFS)

暴力可以解决,题目要求的数据没有超出long long#include<iostream>using namespace std;long long ans;long long n;bool dfs(long long k){ if (k%n == 0) { ans = k; return true; } if (k >= 1

2015-02-12 15:24:15 705

原创 【POJ】3279 Fliptile(十字变换搜索+二进制枚举)

/*题目大意:有一个最大是15*15的方格,只有黑(1)白(0)构成,当你反转一个的时候,将黑变成白,白变成黑他的四个方向也会跟着反转,现在就是问你怎么反转使得最后的翻转次数最少,假如反转次数相同的话字典序最小。看到这题目瞬间就犯难了,老实说,没有做过。实在不敢花时间深究,那就只能好好学了。好了, 现在解决两个问题:1、怎么搜索,能够保证搜索完的结果是正确的。这种题目我们不应该从点出发,

2015-02-12 14:25:22 921

原创 【HDU】 2795 Billboard(线段树)

sum表示的是区间的剩余容纳长度#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<algorithm>using namespace std;#define MAX 200005#define ls rt<<1#define rs rt<<1|1#define mid (l+r)>>1

2015-02-11 21:36:07 526

原创 【HDU】1394 Minimum Inversion Number(线段树求逆序数)

题目大意:给一个长度为n的序列(n<=5000),由0~n-1的数字组成。每次把最左边的数挪到最右边形成一个新的序列。那么一共可以形成n个序列。求这n个序列里面最小的逆序数是多少。 AC代码:/*线段树求逆序数思路:线段树求逆序数的方法并没有想象的那么神奇,对于求单个a的逆序数的方法则是在a到max当中寻找已经出现过的数,出现的个数便是该数的逆序数只是这边将个数通过线段树优化了,使得求解更为

2015-02-11 19:26:22 547

原创 【poj】2828 Buy Tickets、2182 Lost Cow(线段树-单点更新)

题目大意:人们一个一个的来排队并插队,按人到来的顺序给出每个人插队的位置(插在第几个人后面),并告知每个人的id号,输出最终队伍的情况。 思路:这道题假如你正向去处理的话,会发现,当你确定一个位置的时候,会面临之后还需要将这个位置以及这个位置后面的所有位置下调一个位置,这样在插入上,会有很大的复杂度。 所以遇到这种情况不如从后面开始向前遍历。而且这个时候他所要插入的位置便是他最终的位置,假如这个

2015-02-11 15:26:48 583

原创 【HDU】1254 推箱子(BFS DFS HASH记录走过的状态)

思路: 很容易想到用搜索去做,并且很容易想到在搜箱子的同时要去搜索人能否到达。 并且两个搜索我们在搜索的同时可以看成是独立的。 人搜索能不能到用DFS并且不用回溯,这样速度会更快。因为对于同一点我们只要到一次就可以了,并不要求最短。所以不用回溯。 在搜索箱子能不能到的时候并没有考虑到重复通过一点的问题。但是时候看了题解才恍然大悟,例如在箱子堵住了唯一路口,但要向人那边前进的时候,就需要后退,

2015-02-10 17:36:20 498

原创 【Coder Force】264C - Choosing Balls (DP高难度思维转换)

卡了2天,说多了都是泪。/*该点的最大值的可以由前面某个点加上相应的值得到。而前面的点可以分析为以下的条件1、前面的这个点与该点颜色相同。2、这个点与这个点颜色不同。3、前面没有点。现在分析:由于1、3两个条件已经是o(1)的时间,所以不需要优化。主要的时间出在于2的时间,2需要遍历。假设2里面有n个条件需要判断,其实归结起来,我们只需要判断两个情况1、这个点的颜色与该点相同2

2015-02-09 11:13:50 737

原创 【Coder Force】#360B - Levko and Array(DP 二分枚举)

题目大题:CF上的题目还是比较容易读懂的。这道题的意思嘛,他是说,有一个不超过2000个数的数组,每一个数与后面的数的绝对值称为value,那么所有当中最大的value就是整个数组的value,现在你有k次变换,每一次可以将其中的一个数变为任何一个使得数组价值最小的数。 假如题目的价值是所有的之和,也可以用这道题的方法。 思路: dp[i]表示的是到i这个位置,使得数组符合条件的最少变换次数。

2015-02-08 21:00:53 641

原创 【Best Coder】#29 B GTY's birthday gift(快速幂|mod的时候记得负!)

题目大意:查看相关场次即可看到。 思路:推公式的题目,可以用快速幂加公式快速解决,也可以用二进制拆分运算的方法加快速度。 需要注意的一点在于:今后在mod之后有涉及到运算的都要加上一个mod之后再mod,或者统一都加一个mod 顺便复习一下二进制拆分的方法!! 二进制拆分的做法AC代码:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#i

2015-02-07 22:55:53 931

原创 【BestCoder】#29 C GTY's gay friends(区间和 随机数判重)

题目大意:可以到相应的场次查看中文翻译。 思路:其实这道题很简单,对于一个等差数列,我们要判断他是否每个数都出现,只需要判断区间和或者是最大值是否符合即可,但这边需要注意的便是中间的重复部分。最大值的判重必要性我就不知道了,而且我也不会做,目测做也超时。 这边就写一下偷别人的区间和 随机数判重的做法 其实这边判重的方法是给一个数加上一个超过1000007的权,然后在计算和的时候,便是唯一的。

2015-02-07 21:46:29 897

原创 【HDU】4135 Co-prime(容斥原理简单应用 质因子的分解)

题目大意:有A到B的数,给定一个N,求在A,B之间的数与N互质的个数。 思路:首先将N质因子分解,然后在A,B之前为其质因子倍数的均与N互质。其中需要考虑交集的情况。奇数个加上,偶数个减去。 AC代码:#include<iostream>using namespace std;int pr_chi[1100];long long cnt,n,ans;long long a, b;void

2015-02-06 21:54:38 600

原创 【CodeForce】509F Progress Monitoring(树形情景区间DP)

题目大意:有一段深搜的代码,是遍历一个邻接矩阵,然后输出一个序列,这个邻接矩阵的原形是一棵树,那么现在就是要你根据序列,求出最多有多少个不同的树遍历之后可以得到相同的序列。思路:这道题属于简单的区间DP,仔细点想就可以了。第一种方法也是最直接的思路。令dp[i][j]表示的是以i这个点为根,其余点为它的子树时,符合条件的最大个数。从样例可以想到1 2 3由于3和2交换之后,依然

2015-02-04 16:29:30 884

原创 【URAL】1091 Tmutarakan Exams (简单容斥原理)

题目大意:从不大于s的非负数中选择k个,并且k个数的最大公约数大于1,问有多少组。思路:这边我们可以枚举最小公约数,那么最小公约数的个数中选择k个即为一种方案,因为最大数不超过50.所以枚举的最小公约数即为小于30的所有质数。{2,3,5,7,11,13,17,19,23,29}现在可以假设选择了以最小公约数为2的序列,已经最小公约数为3的序列,可以知道,最小公约为6的序列被多

2015-02-03 16:14:49 822 1

原创 HDU 1796 How many integers can you find(简单容斥原理)

题目大意:有一个序列,大小为m,里面有m个不超过20的非负数,各不相同。要求在1-n中有多少个能被m个数中任意一个数整除。题目思路:简单的容斥原理应用。就不说了直接上代码。有两种方法,一种是DFS,一种是直接位元素枚举暴力(study from zhixiaoli)DFS:(速度较快)#include#includeusing namespace std;long long

2015-02-03 12:20:04 810

原创 Hdu 4336 Card Collector (状态概率DP|容斥原理)

详细的题目大意与解析大家参考一下kuangbin的文章。kuangbin链接这边说一下自己对于kuangbin代码以及容斥原理位元素枚举的理解与解释,希望对大家有所帮助。状态DP AC代码:状态压缩的思想我就不赘述了,我也只是略懂,这边仅仅分析一下状态方程由于量比较多,我这边有的便用文字代替,有利于描述。dp[i]表示i状态达到满状态(即收集满n个物品,以下称满状态)所需要的期

2015-02-02 22:10:00 929

原创 【ZOJ】3604 Help Me Escape(概率DP)

题目大意:有n条路可以选择,随机选择,选择了这条路时有一条规则,假如攻击力f大于了这条路的ci,那么可以从这条路逃出去,花费ti(有对应公式计算)假如小于等于该值,则花费一天,并且攻击力增加ci,重复刚才的操作。问最终的期望是多少。思路:dp[i]表示的是攻击力为i的情况下,出去的期望。根据期望的概念可以得状态方程:dp[i]+=(1+dp[i+c[i])/n (当攻击力小于等

2015-02-02 14:08:54 908

原创 CodeForce 508C Anya and Ghosts (贪心+模拟)

题目大意:有m个时刻,在第i时刻即wi秒的时候需要保持有r根蜡烛亮着,每根蜡烛维持的时间为t秒,点一根蜡烛需要1秒。注意:一根蜡烛亮的时间为下一秒开始。并且一开始是可以事先准备蜡烛的。想法:利用了优先队列,维护r根蜡烛,每次wi秒,它需要开始点蜡烛的最晚时间为wi-t,如果不够这个时间,那么在最晚结束点蜡烛的时间wi-1开始补上。感谢阿扎夫人提供的思维题。AC代码:#defin

2015-02-02 10:59:07 878 1

转载 SGU 495 Kids and Prizes (概率DP)

Copied from kuangbin495. Kids and PrizesTime limit per test: 0.5 second(s)Memory limit: 262144 kilobytesinput: standardoutput: standardICPC (International Cardboard Producing C

2015-02-01 22:12:21 505

原创 CF 467C - George and Job (简单区间DP)

题目大意:有一组数p,选择k组数,每组数是连续的m个数,求最后的大小,看样例比较好理解。思路:一开始我的想法便想到了dp[i][j]表示的是到i这个位置,已经取了j组数时候的最大和。不过接下来的想法跟我的代码实现不大一致,想法没错。我是想要求dp[i][j],那么他就等于前面dp[k][j-1]+p[i-m~i]或者是直接从前面dp[k][j]中选择最大的过来。

2015-02-01 11:27:04 659

空空如也

空空如也

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

TA关注的人

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