自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dan__ge的博客

Today is difficult,tomorrow is more difficult,but the day after is beautiful.

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

原创 PHP导出数据到csv和execl文件

导出到.csv文件public function exportData() { $fileName = 'file-'.date('YmdHis', time()). '.csv';//导出的文件名 header("Content-type:text/csv;"); header("Content-Disposition:attachment;fi

2017-09-18 10:55:26 842

原创 codeforces 732F 双联通分量

点击打开链接题意:给一个无向图,现在将所有的边变为有向,使得每个点可以到达的点的个数的最小值最大,然后将变好的有向图输出思路:可以知道无向图时在一个连通分量中的点是可以做到互达的,也就是这个联通分量里的点可以变成有向的联通分量,那么现在的图就是一个由好多个连通分量组成的一个树,然后对于割边来说,只有确定它的方向才能找出那个最小值,因为割边为有向了,所以所有的联通块肯定都是指向最大的那个联通

2016-11-23 13:19:58 760

原创 codeforces 733F LCA+最小生成树

点击打开链接题意:给一个图,及每条边的边权,然后每条边都可以使自己的边权减少1,但是需要费用ci,然后你有S的费用,问你如何分配这些费用使得最小生成树的值最小思路:首先要明确对于这所有的费用,我是全部用在一条边上的,也就是说只用修改一条边的权值,那么我们可以先将原图的最小生成树找出来,然后建个LCA 的图,之后枚举每条边,如果是最小生成树上的边,那么直接减然后判断即可, 但是如果不是的话,

2016-11-20 14:39:26 947

原创 HDU 3622 2-sat+二分

点击打开链接题意:给了n个点对,每一对只能引爆其中一个,然后所有的点的爆炸半径是一样的,然后要求所有的点的爆炸范围不相交,问爆炸半径最大是多少思路:二分半径的大小,然后判断条件就用2-sat就可以,对于点对A和B,若A和B不能共存,即A,B不能同时取,连边,然后每次判断就可以了,二分可以用精度来做,也可以二分多次已达到结果#include #include #include #i

2016-11-02 19:33:55 569

原创 POJ 3207 2-sat

点击打开链接题意:n个点一次排列在一个圆上,然后给出m对关系,代表a和b可以在圈内连线,也可以在圈外连线,然后问是否可能使得每对关系都有连线且没有线相交思路:对于每两对关系来说,若它们都连圈内的线有交点的话,则说明其中一个必须连圈外的线,那么就是这样连边,然后2-sat跑完判断即可#include #include #include #include #include #incl

2016-11-02 18:29:20 488

原创 HDU 5934 强连通分量

点击打开链接题意:给了n个炸弹,然后让你引爆其中的炸弹,然后使得所有的炸弹都爆炸,一个炸弹爆炸会使得它半径内的炸弹爆炸,以此类推思路:强连通缩点,然后找入度为0的所有的联通块,然后在联通块内找一个花费最小的即可#include #include #include #include #include #include using namespace std;typedef lo

2016-10-29 18:56:00 1124

原创 POJ 3683 2-sat

点击打开链接题意:给了n个人的结婚时间,然后要有一个D的时间完成一个特殊活动,这个活动只能在开始或者结束之前完成,牧师需要主持这个特殊活动,问牧师是否可以主持n个活动不冲突,若可以输出一种可能的情况思路:挑战程序设计上的例题,对于活动A和B来说,若A开始B开始冲突的话,那么!A V !B为真,然后还有开始和结束,结束和开始,结束和结束这四种情况的式子,然后连边跑scc即可,然后输出的时候c

2016-10-28 18:13:05 500

原创 POJ 3678 2-sat模板

点击打开链接题意:给定一些关系,然后结果给出,问你是否可以给0到n-1分配0或1使得所有关系成立思路:2-sat的模板题,理论不多说了,然后就是根据给定的关系建边即可#include #include #include #include #include #include using namespace std;typedef long long ll;typedef un

2016-10-28 17:10:50 612

原创 51nod 1685 树状数组+打标记

点击打开链接题意:中文思路:之前看了好久感觉应该二分答案,但是二分条件不会写,看了出题人的题解恍然大悟,对于二分的mid,统计到i为止的大于等于mid的个数,然后若一段区间的中位数大于等于mid的话,则2*(num[r]-num[l-1]>r-l+1;代表这个区间的大于等于mid的个数比区间一半的元素多,则中位数就大于等于md,转化一下就是2*num[r]-r>2*num[l-1]-l+1

2016-10-27 13:06:49 503

原创 51nod 1682 打标记

点击打开链接题意:中文思路:写的比较暴力的n^2,还是跑过去了,对于每一个点来说,将整个区间的小于它的值记为-1.大于它的记为+1,等于的为0,然后因为这个点作为中位数则必须包含它,所以前面打完标记后,后面的计算一下就可以了#include #include #include #include #include #include #include using namespac

2016-10-26 20:01:42 442

原创 51nod 1686 想法

点击打开链接题意:中文思路:我们可以二分要求的那个次数,然后对于每次判断遍历整个数组求出大于等于mid的个数即可,用vector寸一下个数即可#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long

2016-10-26 19:39:47 424

原创 51nod 1525 并查集

点击打开链接题意:中文思路:直接并查集维护就行了,对于区间合并的我用一个数组记录和它一个集合的最远点即可#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3

2016-10-26 14:25:03 467

原创 51nod 1766 线段树维护树的直径

点击打开链接题意:中文思路:用线段树维护树的直径,具体的可以参考这篇文章,首先要知道如何合并一个区间,那么要知道左区间的最长路径的两个端点以及右区间的两个端点,合并后的最长路径就是4个端点的6种组合中的一个,知道这个就相对简单点了,路径长度的计算可以用LCA-RMQ来完成#include #include #include #include #include #include

2016-10-26 13:47:41 641

原创 codeforces 716D 最短路

点击打开链接题意:给一个图,其中边权为0的边是需要更改的边,更改后的值为正数,且最短路的长度为L,问其中一种合法的分配方法思路:对于边权为0的边,先不管然后跑最短路,若最短路的长度小于L,则无解,若长度等于L,则将0边变为inf输出即可,最后一种情况就是依次将0边变为1边,然后跑最短路,若当前的最短路值小于等于L,说明已经有一种情况满足了,其它的没有走过的0边就是inf,之前走过的变为1,

2016-10-24 19:42:02 595

原创 codeforces 519E 倍增法LCA

点击打开链接题意:给一个树,然后每次询问需要统计树上的点到达a和b的最近距离相等,求这样的点的个数思路:因为是一个树,所以最近距离便是LCA上的边,那么就可以看出来当a和b的距离是奇数时结果为0,当是偶数时,最中间的那个点可以,并且与它相连的不是LCA上的点都是可以的,自己画一个图很好看出来      以前的模版不能快速求出某个点的第几个父亲,而这个可以,以后就用这个,其实记录父节点暴力上

2016-10-23 16:54:59 623

原创 HDU 5416 dfs

点击打开链接题意:给一个树和树上的边权,然后Q个询问,每次询问树上的不同点对的路径异或值为s思路:因为a^b==c则a^c==b,所以我们以1为根建树,然后每个节点保存1到自己的异或值,然后每一个异或值都记录个数,最后询问的时候就遍历所有的点为结尾,然后看一下有多少个出现过,但是会算两遍,然后就是注意s==0的情况#include #include #include #include

2016-10-23 14:53:26 415

原创 51nod 1672 线段树

点击打开链接题意:中文思路:本弱并不会,看了看出题人的题解,总是感觉被智商压制了,首先要按左端点排序,然后右端点的位置在线段树中更新+1,然后对于每一个区间来说,以这个区间的左端点为开始,那么我们就要找一个最远的右端点且被覆盖过K次的那个点,这就要在查询时来完成这个要求了,与其说是算法还不如说是想法题#include #include #include #include #incl

2016-10-19 15:33:08 456

原创 51nod 1208&& POJ 2482

51nod点击打开链接题意:中文思路:将二维转化成一维来做,对于当前点来说它可以产生结果的区间是Y到Y+H,然后停止产生结果是在X+W+1处,所以在X+W处标记一下即可,用线段树边扫描边更新最大值#include #include #include #include #include using namespace std;typedef long long ll;typed

2016-10-19 14:09:47 477

原创 SPOJ 3267 主席树||线段树+离线

点击打开链接题意:给一个数列,然后多次询问,询问l到r区间内不同数字的个数思路:主席树模版题目或者线段树+离线操作都可以,而线段树+离线的话HDU 3333 也是一道基础的题目,求得是不同数字的和,变成个数就是这道题目了先是主席树的,代码参考kuangbin巨巨#include #include #include #include #include #include #in

2016-10-13 14:17:15 504

原创 POJ 2104&2761 主席树模版

点击打开链接题意:给一个数列然后有多次询问,问l到r中第K大的数思路:模版题,模版来自点击打开链接    PS:数独不如划分树快,但是用途比划分树要广#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned l

2016-10-13 11:55:55 416

原创 HDU 3729 二分图匹配

点击打开链接题意:每个学生说自己的排名在一个区间,然后老师想知道说真话的学生最多是多少,并将说实话的学生按字典序最大输出思路:简单的匈牙利二分图匹配,因为需要字典序最大,所以在匹配的时候要先满足人的序号大的先匹配#include #include #include #include #include #include using namespace std;typedef l

2016-10-11 14:17:58 487

原创 HDU 4280 网络流SAP版

点击打开链接题意:给一个二维坐标,然后问你从最左边的点走到最右边的点的最大流量思路:题意简单明了的就是最大流,但是注意挑战程序设计的模版会超时,不知道为什么,也不会改模版,只能换kuangbin大神的SAP版网络流了#include #include #include #include #include using namespace std;typedef long long

2016-10-10 16:32:29 537

原创 HDU 4725 最短路

点击打开链接题意:给定n个数,m条边,c是每一层的连接费用,n个数代表n层,每一个数字在一层中,从一层只能走到下一层或上一层的一个节点,费用为c,现在有m条边连接点,问你从1走到n的最小费用思路:以两层为例,前边一堆的话代表第一层的每个点到第二层的所有点的费用都是c,其他边直接连即可,但是这么连肯定是超时的,所以我们可以每一层建立一个超级源点,这个源点到这层的每一个点费用都为0,而这些点可

2016-10-09 20:22:15 427

原创 CodeForces 55D 数位DP

点击打开链接题意:求区间内的数字是每一位的倍数的数的数量思路:加的状态是当前取余2520的余数,因为2520是1到9的最小公倍数,然后还有一个状态就是1到9都有哪些数出现了,可以用状态压缩来完成,然后最后就判断余数和出现的所有1到9的数是不是都取余为0即可#include #include #include #include #include using namespace st

2016-10-09 13:47:33 438

原创 HDU 4734 数位DP

点击打开链接题意:问0到B中按照公式的计算方法有多少数的值小于等于A的计算结果思路:首先将A的计算结果计算出来,然后跑数位DP的dfs即可,但是注意这道题目不能搜到头的方法,那样会超时,所以我们可以判断一下现在的值如果已经大于A的计算结果,那么就没必要继续搜了#include #include #include #include #include using namespace

2016-10-09 13:05:05 433

原创 UESTC 250 数位DP

点击打开链接题意:中文思路:加个flag标记一下是不是前导为0就可以了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;

2016-10-09 12:19:52 460

原创 HDU 3709 数位DP

点击打开链接题意:类似天平,若一个数以某一位当支点,两边的数以题目中那样计算的和相等,这这个数使我们要的,问区间共有多少个思路:操作是一样的,只是我们需要枚举一下支点的位置即可,但是注意因为0是可以的,所以我们最后加的结果要减去1,因为00这样只能当作一个0来计算#include #include #include #include #include using namespac

2016-10-08 20:42:24 432

原创 HDU 5898 数位DP

点击打开链接题意:题意有点绕嘴,不说了思路:dfs时我们只走能过成功的状态,即连续的奇数是偶数个并且下一个是偶数,还有就是连续的偶数是奇数个并且下一个是奇数#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long lon

2016-10-08 20:38:43 367

原创 POJ 3252 数位DP

点击打开链接题意:问给定区间内的数的二进制状态下0的个数大于等于1的个数的数量思路:开两个变量记录0和1的个数即可,然后应该将数分解成二进制#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;c

2016-10-08 20:35:54 351

原创 HDU 3652 数位DP

点击打开链接题意:问1到n中的数是13的倍数且数字中包含13思路:只需要加一个变量代表取余的结果,然后dp数组也需要记录这个取余的结果#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;cons

2016-10-08 20:32:28 358

原创 HDU 2089 数位DP

点击打开链接题意:中文题思路:另外一道数位DP模版题#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const ll INF=0x3f3f

2016-10-08 20:28:24 310

原创 HDU 3555 数位DP

点击打开链接题意:问一个区间内的数字中还有49的数字的个数思路:简单数位DP模版题,模版有大神已解释的很清楚了#include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x

2016-10-08 20:25:01 345

原创 POJ 3600 dfs

点击打开链接题意:给一个小矩阵和一个大矩阵,问你将大矩阵的一些行和一些列去掉后能后变成小矩阵思路:因为列数只有20,所以dfs爆搜即可,然后行就可以直接判断一下删除一些列后是否还可以满足#include #include #include #include #include using namespace std;typedef long long ll;typedef un

2016-10-07 15:05:29 481

原创 HDU 4436 后缀数组

点击打开链接题意:给n个串,求所有的子串去重后相加对2012取余的值思路:思路借鉴这篇博客,其中有一个求一段串可以形成的和有点类似与字符串hash的想法,用的很巧,要用后缀数组的话不同两个串的连接需要用一个其他的数字,然后正常计算sa和height,然后当遇到的第i个是加的那个数字或者是0都不计算,因为题目说前导不能为0,然后i+height[Rank[i]]要小于i所在的串的结束位置,然

2016-10-06 20:55:56 413

原创 CSU 1581 hash

点击打开链接题意:给出两组钟上的位置,问能否通过调整使得在一个时间上思路:之前写过一个KMP的,维护差值即可,用hash的话一样枚举其中一个的位置,然后判断hash值是否相等#include #include #include #include #include #include using namespace std;typedef long long ll;typede

2016-10-05 20:40:00 468

原创 Coderforces 7D hash+dp

点击打开链接题意:题意比较简单不说了思路:用hash来判断一下到当前位置是不是回文串,利用hash来写真的是很方便,然后一个(看似)简单的DP就OK了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned l

2016-10-04 19:58:27 375

原创 HDU 4821 字符串hash

点击打开链接题意:给定M和L,然后一个字符串,问你连续的一段M*L,使得这M个长度为L的串两两不相同,问所有的不同的结果,即不同位置的两个串都满足情况,但是串相同则视为一种,即去重思路:因为是连续的字符串,可以计算每一段串的hash值,然后将结果放到map中,可以自动去重,注意对于ull的数来说,不需要取余操作,会通过自然溢出来完成     PS:弱校的一道比较简单的hash匹配让我认识到

2016-10-04 19:41:49 446

原创 HDU 5875 RMQ-ST

点击打开链接题意:给n个数,然后m个询问,询问是L R,问从L开始一直向后取余的结果思路:比赛的时候就有个想法,就是因为每个数取余的话只有比它小的才有影响,那么我们就找到比当前位置小的那个数的位置就可以了,中间略过的元素是没有影响的,然后因为一个数取余后结果至多变成一半,所以10的9次方的数最大的复杂度就是log10的9次方,然后找位置的话需要用二分,所以总的复杂度就是m*logn*log

2016-10-04 11:18:08 478

原创 BZOJ 2330 查分约束

点击打开链接题意:中文思路:根据条件构造模型即可#include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int inf=0x3f3f3f3f;c

2016-10-01 11:22:42 386

原创 HDU 3397 线段树区间合并

点击打开链接题意:五种操作,0全部置0,1全部置1,2是0变1 1变0,3是询问1的个数,4是询问最长连续的1思路:推荐先写hdu 3911 ,是这题的简单版,这题注意的地方就是一旦有置0和置1操作,那么2操作的标记就要被覆盖,剩下的操作都是比较精典的区间合并操作了#include #include #include #include #include using namespa

2016-09-30 17:36:57 409

空空如也

空空如也

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

TA关注的人

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