随笔分类 -  codeforces

摘要:和poj 的hotel差不多,多了一些细节处理的过程给一辆汽车安排空位的时候还需要和前后的车都保持一定的车距,如果前面没车或者后面没车,则可以停在边界上典型的线段树区间合并View Code #include<cstdio>#include<cstring>#include<vector>#include<map>#include<algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int max 阅读全文
posted @ 2012-05-01 11:15 Because Of You 阅读(529) 评论(0) 推荐(0)
摘要:BRMQ+LCA+边双连通View Code #include<string.h>#include<stdio.h>#include<vector>#include<math.h>using namespace std;const int M =100100;const double inf = 1e20;inline int min(int a,int b){return a<b?a:b;}int tdfn,tot;int dp[20][2*M],vis[M];int B[2*M],LOG[2*M],used[M],F[2*M],pos[ 阅读全文
posted @ 2012-04-29 16:34 Because Of You 阅读(426) 评论(0) 推荐(0)
摘要:http://www.codeforces.com/problemset/problem/182/E给你n中篱笆,每种篱笆都有一个长和一个宽,设为a[i],b[i],再给你一个长度L问用这些篱笆的长可以组成多少长度为 L 的漂亮的篱笆漂亮的定义: 1、相邻的两个篱笆要属于不同的种类 2、 后一个篱笆的长必须等于前一个篱笆的宽注意:一个篱笆的两个边长都可以作为长因为所选的每个篱笆都有两种状态,一种是用a[i]作为长,一种是用b[i]作为长所以可以设dp[i][j][0]表示组成i长度的篱笆,最后一个为第j个篱笆,且第j个篱笆用a[i]作为长的方案数同样dp[i][j][1]表示第j... 阅读全文
posted @ 2012-04-25 14:35 Because Of You 阅读(478) 评论(0) 推荐(0)
摘要:http://www.codeforces.com/problemset/problem/182/D求两个字符串的公约数的个数,具体细节见题目利用KMP可以求最小周期的特性来解这道题具体证明参见我的另一篇文章所以第一步:KMP求出两个串的最小周期 t1 t2第二步:分情况讨论1: t1==n&&t2==m2: t1==n t2!=m3: t1!=n t2==m4: t1!=n&&t2!=mView Code #include<cstdio>#include<cstring>int n,m;char a[100100],b[100100]; 阅读全文
posted @ 2012-04-25 07:20 Because Of You 阅读(528) 评论(0) 推荐(0)
摘要:题意:给你两个字符串s、t,输出由s组成的字符的一个排列,使得s字典序大于t,且字典序尽可能小做法,贪心,要使字典序尽可能小又要大于t的字典序,则应该使得答案串与t串的前缀尽可能多的相同然后就分两步走了1 如果s中包含了t中的所有字符,且有多余的字符(因为字典序要严格大于t),则直接输出t,在接在后面输出剩下的字符的最小字典序的一个排列2 假如1的条件不成立,就找这样一个位置,这个位置之前的字符都可以做到和t相同,且这个位置的字符要比t相应位置大,因为要是前缀尽可能多的相同,所以贪心的从后往前求这个位置,找到这个位置后就可以把s中剩下的字符一并输出了View Code #include< 阅读全文
posted @ 2012-04-22 20:24 Because Of You 阅读(357) 评论(0) 推荐(0)
摘要:http://www.codeforces.com/problemset/problem/175/B标签是模拟题,我用两个数状数组做的,分别记录比当前数大的数的个数和小于等于当前数的个数有些细节都要处理好View Code //============================================================================// Name : w.cpp// Author : dd.cpp// Version :// Copyright : Your copyright notice// Descript... 阅读全文
posted @ 2012-04-16 18:55 Because Of You 阅读(190) 评论(0) 推荐(0)
摘要:http://codeforces.com/problemset/problem/160/E题意 :一条直线上有很多车站有n辆车 每辆车的信息是 s,f,t 出发的站点,目的地,以及出发的时间,中途可以在其他站停留m个乘客 每个乘客的信息是 start ,to ,tx 出发的站点 要到的站点 出发时间如果一个乘客能够做上某辆车必须满足s<=start,to<=f,tx<=t而且要满足车的出发时间越早越好。输出时每个乘客应该坐上的车,如果没有输出-1限制条件比较多,出发点 终点 时间都要题目满足要求,而且要在满足前两者的情况下,出发的尽可能早首先很容易想到排序,把汽车和乘客的信 阅读全文
posted @ 2012-03-28 10:05 Because Of You 阅读(395) 评论(0) 推荐(1)
摘要:给你一幅图,对于图中的每一条边,判断1、存在于任何一颗最小生成树中 any2、至少存在于某一颗最小生成树中 at least one3、不存在任何一棵最小生成树中 none看见就想一做的图论题思路:至少存在于某一颗最小生成树中 这种情况只可能存在于相同权值的边中,所以每次对于同一权值的边一起处理,再用 最小生成树中克鲁斯卡尔的方法来搞利用并查集:如果某时刻一条边的两个端点在同一集合,如果添加这一条边,就会形成一个环,而环中其他的边都是在上一轮已经添加进去了的(权值都比当前边小)所以当前边是none(一开始初始化为none),如果不在同一集合,标记为at least one,对两个集合建边,建完 阅读全文
posted @ 2012-03-23 16:02 Because Of You 阅读(527) 评论(0) 推荐(0)
摘要:http://codeforces.com/problemset/problem/118/E给定一幅连通的无向图,输入n、m以及m条边要求给每条边一个方向,即把无向图转换成有向图,然后输出每条边(a b 表示a指向b)要求转换后的图两两间依然可以互相到达。如果不可能,输出0;方法:如果原图中存在割边,输出0;反之,随便从某个点开始dfs,把搜到的边一次输出来就好了因为没有桥,则原图是一个双连通分量,两两间可以互相搜到View Code #include<cstdio>#include<vector>#include<set>#include<cstri 阅读全文
posted @ 2012-03-23 15:44 Because Of You 阅读(453) 评论(0) 推荐(0)
摘要:题意:一幅图,至多有一个点的度数大于2,,然后有三种操作,给每条边染成黑色或白色,询问两个点间的黑色路径的距离是多少(即两个点有黑色路径相连而成)。找出那个度数大于2的点,没有的话就是一条链。有几个度就有几条链,对于每个操作,找到每个点相应的链,和这个点是这条链上的第几个点,用树状数组做就可以了。考察图的模拟,二维树状数组或线段树学习了别人的代码View Code #include<cstdio>#include<cstring>#include<vector>#include<cstdlib>#include<algorithm>u 阅读全文
posted @ 2012-03-21 13:24 Because Of You 阅读(398) 评论(0) 推荐(0)
摘要:http://www.codeforces.com/problemset/problem/165/E蛮巧妙的,关键是以前做的少,mark一下View Code #include<cstdio>#include<cstring>int f[5000010],a[1000010];int main(){ int n,i,j,k; scanf("%d",&n); memset(f,0,sizeof(f)); for(i=1;i<=n;i++) { scanf("%d",... 阅读全文
posted @ 2012-03-18 01:06 Because Of You 阅读(400) 评论(0) 推荐(0)