自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 hit 1917 && hdu 1814 Peaceful Commission

模板题。hdu 1814要求输出字典序最小的。这样很麻烦,但是可以暴力。不用加文件读入输出。hit 1917#include #include #include #include #include #include #include using namespace std;const int maxn=16005;const int maxm=200005;in

2013-10-13 22:00:27 1299

原创 hdu 3622 Bomb Game

在两个点中选一个点使以他们为圆心的形成的最小半径最大。把任意两个点的距离求出来,把互斥的两个点设为最小。对距离进行二分,如果两个点距离小于当前二分的值,则把a-b'和b-a’连起来,判断可行。#include #include #include #include #include #include using namespace std;#define eps 1e-5

2013-10-13 21:53:02 697

原创 poj 2749 Building roads

把每个牧场分别和两个中转站其中一个连接。使曼哈顿距离最大值最小。要把每个牧场拆成两个点,一个表示连到第一中转站,一个表示连到第二个中转站。记录牧场之间的曼哈顿距离,然后二分,对于当前距离,如果满足连一条边,如果两个牧场不友好,他们不相同牧场连一条边,如果两个牧场友好,则把连到同一个牧场的点连一条边。#include #include #include #include #i

2013-10-13 21:46:52 583

原创 poj 3648 Wedding

新郎和新娘分别做到桌子的两边,夫妻不能同时坐到一边,不正当关系的两个人也不能同时坐到新娘对面,输出坐到新娘对面的一组可行方案。一对夫妻选择一个人坐到对面,很明显2-sat结构。第i对夫妻用2*i和2*i+1表示妻子和丈夫,对于每个不正当关系,把不正当关系中的a-b',b-a‘连边。然后逆序建图,拓扑排序染色,输出结果。#include #include #include #inc

2013-10-13 21:36:54 607

原创 poj 2723 Get Luffy Out

有n对钥匙,每对钥匙只能开一个门,有m个门,只能按顺序1到m的打开,每个门上有两把锁,打开其中一把就可开门,输出最多可以开多个门。二分开门的个数,加入门有锁2,3,钥匙1,2,和3,4那么2,与3矛盾,1,与4矛盾。应1,3连边,2,4连边,判断是否可行。#include #include #include #include #include #include #inclu

2013-10-13 21:29:13 543

原创 Hdu 3631 Shortest Path

每当标记一个点,就一个点为松弛的点,做一次floyd。最多一百个点,不会超时。#include #include #include #include #include #include #include #include #include #include using namespace std;#define L(t) t<<1#define R(t) t<<1|

2013-10-13 20:50:01 555

原创 poj 3694 Network

先对当前的图求割边,记录割边,割边是由两个点组成,求完割边后,这个图就可以看做一颗树,但不要缩点,这样更方便。对新加入的边的两个端点求最近公共祖先,这个点到公共祖先上的割边都不再是割边了。求最近公共祖先用朴素的即可。感觉这个题很好。#include #include #include #include #include #include #include #inclu

2013-10-13 20:46:06 515

原创 poj 2942 Knights of the Round Table

每个有矛盾的骑士不可相邻,一个圆桌只能是奇数个骑士。我们把没有矛盾的骑士连一条双向边。求出每一个块,如果这个块存在奇数环,那么我们可以保证这个块一定可以满足条件。对块上的点进行染色,当前点染红色,把相邻的点都染成蓝色,如果遇到一个已经染色的点且这个点是红色,则证明存在奇环。如果存在奇环,这个块上所有的骑士都可以参加会议。#include #include #include

2013-10-13 20:38:34 548

原创 poj 1523 SPF

求删掉割点后图变成几个连通分支。求割点,对每个块上的点进行统计。输出割点存在于几个块就可以了。#include #include #include #include #include #include #include #include #include #include using namespace std;#define L(t) t<<1#define

2013-10-13 20:29:58 573

原创 Ural 1471 Tree

询问一棵树的任意两个节点的最短距离。裸的lca。#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=500001;struct Node{int val,to,next;}node[2*maxn];int head[ma

2013-10-06 18:51:59 451

原创 Codeforces Beta Round #52 (Div. 2) D - Changing a String

dp[i][j]表示把前i个A串转化为前j个B串需要的最少操作。op[i][j]表示这个当前操作是插入,删除或者替换。#include #include #include #include #include #include #include #include #include #include using namespace std;#define L(t) t

2013-10-04 18:20:15 375

原创 CodeForces Round #145(234F) - Fence

一开始用背包做,后来发现思路不正确。dp[i][j][k]表示第i个矩形涂颜色k后,颜色A的面积为j的最小值。这个dp应该是很好想的,但是状态转移感觉还是比较绕的,注意。参考http://blog.csdn.net/kk303/article/details/8094252#include #include #include #include #include #includ

2013-10-02 14:11:30 517

原创 2013南京网络赛 1002 Parade Show

对于原类型进行匹配,对于一个可匹配的位置有三个要求:1.当前位置和匹配位置高度相同。2.高于当前位置的最低的高度要与匹配位置匹配。2.低于当前位置的最高的高度要与匹配位置匹配。而且找到了一个匹配后,应转移到匹配串的开头。poj3167和这个题很相似。参考http://blog.csdn.net/xiaoxiaoluo/article/details/7475857#

2013-10-02 14:04:23 1026

原创 2013长春网络赛 1010 Flyer

因为最多有1个奇数的,对区间进行二分,判断到区间中点的和奇偶性,输出用%I64d。大视野的原题。#include #include #include #include #include using namespace std;typedef long long LL;const int maxn=200005;LL A[maxn],B[maxn],C[maxn];in

2013-09-30 17:59:50 701

原创 2013长春网络赛 1006 Stone

比赛的时候题意理解错了,坑。n是必败态,n-1到n-k-1是必胜态,判断先手是必胜态还是必败态。#include #include #include using namespace std;typedef long long ll;const int maxn=1000001;char str[maxn];int next[maxn];int main(){

2013-09-30 16:44:06 521

原创 2013 长春网络赛 1005 Theme Section

给出字符串,形如EAEBE,求E最长长度。先求kmp的next数组,那么对第i个字符,str[0,next[i]]与str[i-next[i],i]相同。现在找出尾部的E,然后去查找中间的E是否满足长度为next[len-1],当不满足时,j=next[j],缩短与首部的匹配长度,这样直到j=-1为止。#include #include #include using name

2013-09-30 16:40:40 622

原创 2013长沙网络赛G Goldbach

一开始以为是找规律,写了个朴素的,没找到规律。忘dp上想,想着想着就出思路了。一开始dp[i][j]表示用用i个素数的和为j的方案。把乘和加写到一起dp[i][j][k]。在统计的时候++或**会有重复。这样,对于dp[]

2013-09-23 22:02:30 987

原创 暑期训练-泰山挑夫2

总结在最后1.CF92A Chips水题,m减去i(1...n)直到m下一次小于零为止。2.CF92B Binary Number找规律,需要加1的次数是倒数第一个1左边所有0的个数加上一个1的个数。如果不加1除2的次数就是长度len-1。加1除2的次数是len。len是字符串的长度。3.CF92C newspaper deadline朴素的算法o(n2)是把目标串的每

2013-08-10 09:53:20 862

原创 暑期训练-泰山挑夫1

都是codeforces上的原题。A.Watermelon本题唯一要注意的就是2不可分割。B.Before an Exam记录最少时间和最大时间,如果用时在最少和最大区间中,输出YES,然后贪心的把每天的时间输出。也有人用dp,不过没必要了。C.registration system用stl中的map做很简单,也有用字典树的,同样没有必要。D.Mysterious

2013-08-02 21:42:38 1085

原创 Ural 1306. Sequence Median

求一个数列的中位数,最多有250000个数。看了discuss才知道用优先队列,先压栈N/2+1个然后边压栈边弹栈。N为奇数就是栈里的弹一个,N为偶数就从栈里弹两个。#include#include#include#includeusing namespace std;priority_queue que;int main(){ //freopen("in","r

2013-08-01 22:01:59 712

原创 Ural 1037. Memory Management

看到网上有用堆做的,我是用线段树做的,根据noclyt的思想。把30000个内存建树,记录区间内最早到期的内存时间。当申请内存时,查询编号最小的空闲内存。当访问内存时,先查询内存块时候已经到期,否则更新内存块的到期时间。#include #include #include #include #include #include #include #include #i

2013-08-01 21:54:34 582

原创 Ural 1126. Magnetic Storms

题好难读,输出长度为k的区间内的峰值。单调队列的应用。单调队列的插入就是把一个元素加入,从队尾开始到比第一个他的大的元素位置之后,在之后的元素全部抛弃。删除就是从对头找到第一个满足可在队列中的元素作为对头。#include #include #include #include #include #include #include using namespace s

2013-08-01 21:46:51 670

原创 Ural 1090. In the Army Now

#include #include #include #include #include #include #include using namespace std;const int maxn=10010;int sum;int f[maxn*4];void Build(int n){ sum=0; n=n<<2; for(int i=0;i<=

2013-08-01 21:36:05 611

原创 Ural 1028. Stars

看树状数组课件的时候见到过 这个题,给出恒星的坐标,Y轴从小到大有序,那么按y轴的顺序修改树状数组的值,求1-x的区间和就是在恒星左下的恒星数。#include #include #include #include #include using namespace std;const int maxn=15010;const int maxm=32010;int num[max

2013-08-01 21:30:17 705

原创 Ural 1019. Line Painting

在0到10^9的线段上,一开始颜色全白,然后修改多次子区间颜色或黑或白。求最终状态下的白色最长区间。主要就是离散化,然后就直接用线段树了。刚刚开始学线段树,代码很挫。#include #include #include #include #include using namespace std;const int maxn=10010;int col[maxn],x[ma

2013-08-01 21:23:24 634

原创 Ural 1003. Parity

给出在一个区间内1的奇偶性,输出在第一次出现矛盾位置。个人感觉是一个比较难也比较好的并查集的题目,一开始并没有看出来,囧。把给出的区间转化为前开后闭区间,查询区间的短点是否为同一个祖先,若是,则判断奇偶性是否正确。若不在同一个区间把区间短点合并。注意两点:1.记录当前区间短点到最远祖先这段区间的奇偶性。2.合并的时候,是把要合并的区间端点的两个祖先合并。路径压缩的时候修改祖

2013-08-01 21:15:42 693

原创 Ural 1654. Cipher Message

删掉连续的相同两个字母,直到不存在两个连续且相同的字母。模拟一个栈即可。#include#include#include #include #include #include #include #include #include #include using namespace std;#define eps 1e-7#define INF 0x3ffffff

2013-08-01 20:55:53 550

原创 Ural 1100. Final Standings

水题,把AC 的题目分类即可。#include#include#include #include #include #include #include #include #include #include using namespace std;#define eps 1e-7#define INF 0x3fffffff#define L(u) (u<<1)#de

2013-08-01 20:52:32 723

原创 Palindrome

求最少插入多少个字符使原字符串成为一个回文串。用字符的正向串和逆向求出最长公共子序列即可知道需要添加的字符数目。学到一点关于滚动数组的知识。#include #include #include #include #include using namespace std;const int MAX=5050;char str1[MAX],str2[MAX];int

2012-06-27 23:20:14 4803

原创 Longest Ordered Subsequence

此题是一水题,注意数列的数可以取0。可以优化为o(nlogn)。时间为16ms,可能优化的不太好。二分查找很有利用价值,写的还不错。时间复杂度为n^2的。#include #include #include #include #include using namespace std;const int MAX =1010;int a[MAX],d[MAX];in

2012-06-13 23:29:43 284

原创 alignment

刚一开始理解错了题意,当我wa了两次之后,重新思考,发现在队列里的士兵可以从左边或者从右边没有比他高的即可。由此,此题和合唱队形差不多,求一个最长升序列,以及一个最长下降序列,枚举中间的兵和他左边最长下降序列之和。时间复杂度为o(n^2)#include #include #include #include #include using namespace std;d

2012-06-13 23:23:30 2497

转载 最长不下降子序列的O(n*logn)算法

先回顾经典的O(n^2)的动态规划算法,设A[t]表示序列中的第t个数,F[t]表示从1到t这一段中以t结尾的最长上升子序列的长度,初始时设F[t] = 0(t = 1, 2, ..., len(A))。则有动态规划方程:F[t] = max{1, F[j] + 1} (j = 1, 2, ..., t - 1, 且A[j]   现在,我们仔细考虑计算F[t]时的情况。假设有两个元素A

2012-06-11 23:54:00 974

原创 Flip Game

一个4*4的棋盘,怎样按才能最少的按下方格,使之全白或全黑。每个方格仅需按一遍,枚举按的16个方格按或不按。得出的结果是全黑或全白就输出即可。dfs加枚举。可以用位运算进行优化,目前我还不会。#include #include #include #include #include using namespace std;bool map[6][6]={fal

2012-06-10 20:44:20 1538

原创 Parencodings

给出从第i个右括号前左括号的个数,求出第i个右括号与与之对应的左括号内有多少个括号包括该括号。先判断第i个括号是左括号,还是右括号,如果是右括号则向前扫描,如果左括号和右括号数目相等这就是该括号内的括号个数。#include #include #include #include #include using namespace std;int parenthesis[50]

2012-06-10 20:31:36 445

原创 10003 Cutting Sticks切割木棍

题意是一段给定长的木棍,给出切割的位置,切割长度为A和B段,最小费用为A+B.求最小费用。读过题之后,感觉和合并石子差不多。但是想不出状态方程。不知道怎么转移状态。看过别人的思路。加上木棍的开始和末尾当作分割点。递归求解在从第i个分割点到第j个分割点,最小的费用,初始d[i][i+1]=0;其它的都为MAX;则d[0][len+1]为整段木棍切割最小费用。属于区间上的动态规

2012-06-02 22:15:45 3234

原创 UVa 116 Unidirectional TSP

给一个矩阵,选择一条路径,使路径上的数字加和最短。有几个要点。1.第一行和最后一行是可以连通的。做一下判断即可。2.状态很好想,三个可以走到map[i][j]点中最小距离。3.要求输出路径,用数组f[]记录即可,要求字典序输出,看到别人思路是从后往前dp而且尽量选择字典序最小的路径。3.有可能超int。用long long 。#include #include #inc

2012-05-30 00:34:08 378

原创 UVa Problem 10069 Distinct Subsequences

最近学习DP。本题题意是给你两个字符串x和z.问你在x中有多少个z.可以简单的DP加上递推。对与a[i][j]代表长度j个母串中,出现多少个长度为i个子串。如果第i个字母和j个字母不相同,则可以转化为a[i][j]=a[i][j-1];可以理解为长度为i的子串在长度为j的母串和长度为j-1的母串出现次数相同。如果第i个字母和j个字母相同,这可以转化为a[i][j]=a[i][j-1

2012-05-28 00:38:44 536

空空如也

空空如也

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

TA关注的人

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