自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Confidence的专栏

Just For What

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

原创 now or later

题目链接题意:有n架飞机要着陆,每个飞机有两个着陆时间,必须选一个时间。现在要安排各个飞机着陆的时间,使得相邻两个着陆时间间隔的最小值尽量大输入:第一行是飞机的数目n;之后n行每行两个整数表示两个着陆时间(早晚时间);输出:安全间隔的最大值分析:根据每个飞机只有两个着陆时间的特点可以想到TwoSAT。但是,对于这个问题,直接使用显然是不行的,TwoSAT只能对于给定的关系来

2014-03-28 23:00:39 1301

原创 The Largest Clique

题目链接题意:给定一张有向图G,求一个节点数最大的节点集,使得该节点集中任意两个节点u和v满足:要么u可以到达v,要么v可以到达u(相互到达也可以)输入:测试组数T;第一行节点数n和边数m;m行每行两个整数表示一条有向边,点从1编号分析:观察这个特点,那么对于原图中存在的强连通分量,肯定是满足题意的。那么接下来就是缩点,之后的图就是若干个DAG。求节点数最多的路径,也就是在

2014-03-28 14:49:08 1504 1

原创 Proving Equivalences

题目链接题意:给定一个有向图,输入一些边,问最少添加几条边能使整个图强连通输入:数据组数T;第一行n和m,n个点,m个边;之后m行每行输入两个整数表示一条有向边输出:需要增加边的数量分析:既然是关于强连通,那么对于本来已经强连通的部分就没必要考虑了,也就是说先要索点。之后的图一定是若干个DAG图,求出每个图的入度和出度为零的点的个数,取最大值即可关键:特例要想到,如

2014-03-28 13:58:31 1400

原创 Mining Your Own Business

题目链接题意:给定一个无向连通图,选择一些特殊点,当图中任意一个点(也有可能是特殊点)被删去的时候,其他点至少能到达一个特殊点输入:n表示边数;每行两个数表示一条边(从1开始)输出:需要的最少的特殊点和总的方案数分析:首先,如果没有删去点,所有的点都可以到达任意一个特殊点(连通)。主要是分析连通性,所以从割点入手(不要忘了可以删特殊点)显然,特殊点如果选割点的话是不

2014-03-28 11:59:28 1826

原创 Knights of the Round Table

题目链接题意:n个人开会,会议人数至少为三且为奇数。有些人相互憎恨,这些人不能邻座。统计有几个人不能参加任意一个会议输入:n,m。m行包括两个整数k1、k2表示两个人相互憎恨。输入结束标志为n=m=0输出:无法参加任何会议的人数分析:对于存在割点的图,割点两侧的人肯定不能在一个会议中(不能构成环)。而对于不存在割点的一个极大子图,显然任意两个点都可以在一个会议中。然

2014-03-28 10:52:49 1626

原创 Airport Express

题目链接题意:第一行是N,S,E,N个点,S为起点,N为重点;第二行是M,然后M行,每行代表a到b有一个值为c的边;之后是K,每行代表a到b有一个值为c的边。对于K条边,最多只能用一条,求S到E的最短路。输出:路径+使用的特殊边的起点(即路径中第一个出现的特殊边的点号,没有的话输出“Ticket Not Used”)+最短距离思路:既然每条特殊边只能用一次,那么先考虑一下枚

2014-03-28 10:44:10 1440

原创 Guess

题目链接题意:n个数,给出所有区间的和的正负(-、+、0),求出一种可能的序列思路:题目中给出了很多偏序关系,求具体的序列(一种即可)。假如知道了所有元素的大小关系(全序关系)就可以构造出这样的序列。也就是说,给定了偏序关系,求一个满足这个偏序关系的全序序列,也就是拓扑排序了。关键:连续和转化为前缀和,就可以得到很多前缀和的大小关系,用小于(或者大于)关系来构图

2014-03-24 17:47:28 1202

原创 Codeforces Round #238 (Div. 1)__Toy Sum

认识到是用构造法;分析出每个数如何找到对应的数;对于特殊的数对如何处理

2014-03-23 16:14:18 1365

原创 Codeforces Round #238 (Div. 1)__Unusual Product

题目链接题意:对于一个矩阵,求出所有的行与对应的旋转90度的列(关于y = x对称的两排)对应数字的乘机的异或的异或。。。有点绕口,看图那么这个矩阵的值(加号表示异或): (1·1 + 1·0 + 1·1) + (0·1 + 1·1 + 1·0) + (1·1 + 0·1 + 0·0) = 0 + 1 + 1 = 0.现在有三种操作:某一行所有元素取反,某一列所有元素取反,求当前矩阵的值分析:直接暴力肯定不行。然后从特点入手:如果以行列为单位考虑问题,那么在翻转的过程中,单位内部发生了变化,所以

2014-03-23 15:50:45 1497

原创 Codeforces Round #237 (Div. 2)__Restore Graph

题目大意:给定某个点到所有点的最短距离构造这个图。要求每个点的度不能大于k分析:只用构造出这样的图即可。不妨把点按照度排序:度为零的在第一层,度为一的在第二层,以此类推。那么考虑一下k层和k+1层,只要k+1层的每个点都有一条来自k层的边即可。考虑每个点度的限制,那么可以贪心一下,k层的每个点只与k-1层连了一条边,那么k层的每个点还可以连k-1条边;如果k+1层的点数不超过之前一层的k-1倍就可以。特殊:对于第一层的点,因为是第一层之前没有边,所以是k倍;第一层只能有一个度为零的点注意:涉及到乘

2014-03-23 15:34:30 1180

原创 Ant Trip

题意:给定一个无向图,每条边只走一次,可以有多个出发点,最多要多少个出发点?(不考虑孤立点)注意:孤立点不考虑;注意merge的时候的写法

2014-03-22 21:13:52 1102

原创 John's trip

题意:输入a、b、c,表示点a和点b之间有一条边,边序号为c,现在让从第一次输入的两个点中较小的点(这里题意是个坑),走过所有的边后必须回到起点,输出最小路径关键:欧拉回路+输出路径(边序号)

2014-03-22 20:07:26 1339

原创 The Necklace

题意:给很多由两个颜色组成的珠子,看是否能连成一串,相邻珠子相邻部分颜色相同分析:裸地欧拉路判断+路径输出,不过这个题输出要求是以点为单位输出,所以不用记录边的序号之类的注意:数据中会有重边,所以搜索路径的时候要记录一下每条边的数量,每走过一次值减一,所以不能再使用set

2014-03-22 19:08:52 1052

原创 The Monocycle

此题重点在于明白什么是一个点的状态。对于之前接触的普通的dfs判重,一个点的状态就是位置即xy坐标首先明白前提或者目标是使一个点的信息尽可能少。一个点可以记录多个信息,如果不同的信息之间有优劣性(除过信息p,其他信息都相同的两个点可以判断出孰优孰劣),那么就不用算作点的状态(因为可以通过其他方式来筛选出更优的点,以减少点的状态数),对于dfs来说,一个点的信息有x坐标、y坐标、到达这个点的步数,显然步数是有明显的优劣性的,所以不用记录。对于这个题来说,点的信息比较多:x坐标、y坐标、到达这个点的步数、时

2014-03-21 18:05:52 1067

原创 Fire!

火和人的行动是互不影响的,应该独立进行。先进行火的bfs,记录一下火到每个点的步数,在人的bfs时到相应的格子时必须小于这个数

2014-03-21 15:16:38 874

原创 Minesweeper 1D

数字表示它两边的星号的个数,问号是不定。给定一个串,问满足题意的有几种可能分析:1.线性问题2.可以从一个方向递推求得结果方法1:动态规划方法2:记忆化搜索

2014-03-20 19:24:07 1476

原创 Catenyms

是这个题的复杂版,增加了输出路径的一项重点:输出字典序最小的解,可以先对输入进行排序可以保证搜索的时候先进入小的点

2014-03-19 19:50:25 1276

原创 Play on Words

欧拉回路的要求是每个边只访问一次且遍历所有边。这个题目中的要求是每个单词只使用一边,且访问所有单词。所以我们显然可以将每个单词拆成边来构图。比如对于a*****b单词,我们可以a -> i -> b(a和b要换成数字且不与单次序号冲突,i是这个单词的序号)

2014-03-19 13:14:15 1332

原创 Codeforces Round #236 (Div. 2)__Upgrading Array

题目链接思路:求出所有前缀区间的gcd,然后倒着处理。对于当前位置的前缀gcd,求一下这个数的f函数值,如果是负的,那么肯定去掉是对的。然后对之前的位置,gcd值要除以它之后的区间已经除过的数(不用依次去除,只用记录一下之前除的数是多少,然后计算到一个区间的时候,直接gcd除以这个数即可),然后依次向前处理直到结束即可分析:1.为什么要倒着处理呢,因为题目要求每次都是前缀操作,

2014-03-17 19:45:47 1420

原创 Codeforces Round #236 (Div. 2)__Searching for Graph

分析:这个题关键在于对题意的转化,其实就是要求每个点至少有两条边即可,找到一个方法满足这个条件就可以A

2014-03-17 13:10:29 1246 2

原创 Codeforces Round #236 (Div. 2)__Trees in a Row

反思:上来方向就错了,仍然是对公式进行化简并找到了规律。诚然,这个方法是效率高,可是花费在代码和调试上的时间已经宣告了这个题目的失败题目的数据不大,是可以O(n^2)枚举的以后结题的方向:充分利用枚举!!!上来先考虑枚举,在考虑算法接下来完成一下最开始的思路:O(n)对于位置i和j,如果他们不用进行变化,那么需要满足的条件:ipt[j] - ipt[i] = goal * (j - i),我们化简一下可以得到:ipt[i] - goal * i =ipt[j] - goal * j,到这里规律就

2014-03-17 12:01:55 996

原创 QT中常见问题(更新中...)

有关静态变量操作是报错的分析:http://blog.csdn.net/lanmanck/article/details/8912380介绍静态变量:http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html介绍全局变量:http://blog.csdn.net/jiong_1988/article/detai

2014-03-17 10:45:20 1320

原创 线段树_逆序数

题目链接分析:对于输入序列ipt[],每次先查询[ipt[i] + 1, max]区间和(在输入点之前比它大的数的个数)加到answer里边;然后对ipt[i]处加一。这个题是求循环序列中逆序数最小的,那么当树中有n个数的时候,在需要插入数时就把第一个数删去。下边是自己的写法,比较麻烦const int MAXN = 5100;#define lson l, m, rt

2014-03-15 13:54:09 1333

原创 Meet and Greet

题目链接题意:两个牛在一位坐标系上左右运动,速度相同,当两个牛相遇(之前不在一起,现在走到一起了)的时候会叫一声,现在问会叫几声分析:有两种方法,自己反思优略:第一种,以牛的运动状态发生变化的时间点为界限,不用多说,麻烦,效率高;另一种,以时间为界限,简单,效率低自己做题时候也没想就按照第一种方法上了,结果一个多小时就这样过去了。。。由于题目告诉了每个牛动时间单位数在1

2014-03-15 13:53:29 1652

原创 stringsteram用法

参见两个博客:基础,有关多次使用需要的头文件:例子:string result = "10000";int n = 0;stream stream >> n;//n等于10000注意:clear()函数:clear(),这个名字让很多人想当然地认为它会清除流的内容。实际上,它并不清空任何内容,它只是重置了流的状态标志而已str()函数:有两个重载

2014-03-15 13:52:44 1444

原创 Wifi Setup

题目链接题目大意:对于长度为2 * R的区间,建立一个基站的费用是A + B * R(A、B值给定),现在要使得所有点都被覆盖,求最小花费分析:先考虑分治法。对于一个区间[a, b],如果这个区间只有一个基站,那么直接求;如果至少有两个基站,那么中间一定有断开的点(即基站没有覆盖的线段),那么就可以分成两个区间来算。可是如此一来,可能会有很多重复的计算。假如一个区间有多个断点,

2014-03-15 13:52:11 1713

原创 线段树练习_入门

线段树练习_入门几个基本的练习题,对理解线段树有帮助

2014-03-13 16:24:07 976

原创 八数码

八数码的两种搜索方式详细分析A*IDA*

2014-03-12 10:22:42 2034

原创 Codeforces Round #235 (Div. 2)__C. Team

题目链接分析:方法比较麻烦,不过觉得这个思路还是比较清晰的。考虑把n个0放到m个连续的1中间;(左边或右边有一个0)n - 1个0放到m个连续的1中间;(两侧各有一个0)n - 2个0放到m个连续的1中间反思:思路清晰,但是遇到这种判断情况是否符合题意的时候总是找不全需要判断的条件。此题第一次错就是因为在0插入1时,没有判断sv(比较短的1的数量)不能等于0而出错。还是

2014-03-11 21:48:13 1073

原创 康拓展开

使用情况:可以在hash时候,使用十分方便。分析:比如在八数码中,如果直接采用将9个数字连起来组成一个数,那么对于111111111等等之类的数字是被浪费的。既然数字出现是有限制的(只有9个不同的数),那么就可以用当前数在所有情况(由小到大排列)中的序号来表示当前数,显然这也是一个双射。hash时候也可以不用判重。启发:在hash时候,可以思考一下总个数是否比较小。如果是,那么就可以考虑能不能以它在总数中的序号作为hash值了

2014-03-10 16:12:46 1183

原创 修改并查询连续的区间

给定一个下标i,查询i所在的连续的符号x的区间

2014-03-10 11:44:05 1591

原创 Inna and Binary Logic

是用二进制的思路,把每个数的每一位排列开,可以得到n个0、1的排列,然后按照上述规则可以形成一个上小下大的三角形

2014-03-07 21:59:21 1296

原创 Dima and Bacteria

题目链接不难,相同种类的距离是否为零用并查集判断。之后用floyd判断int ind[600], father[MAXN], dis[600][600];int number, kase, type, a, b, c;void init(){ REP(i, MAXN) father[i] = i;}int getfather(int n){

2014-03-07 15:47:01 1224

原创 Cards

题目链接题目大意:a个x和b个o,对于连续的len个x,结果加上len * len;对于连续的len个o,结果减去len * len分析:

2014-03-06 18:05:18 999

原创 矩阵旋转模板

将在n*m的矩阵中坐标为a,b 将矩阵顺时针旋转或者逆时针旋转后输出这个点在旋转后的矩阵中的坐标

2014-03-06 10:30:46 1125

原创 Pan's Labyrinth

分析出来三角形的底可以是任意两个点组成,但是对应的最优高的第三个点一定在凸包上,那么就可以在凸包上进行旋转卡壳,整体复杂度为O(n * n * log(n))

2014-03-05 17:04:44 1355

原创 Easy billiards

可以倒着思考这个问题。想象一下,假如最后只能剩下一个点,那么采用正确的策略时,最后一步一定是剩下了一个点。那么我们倒过来整个过程,在最后的一个点基础上选定一个方向,增加在输入集合中的一个点,并一直进行下去,直到不能增加为止,这样就可以得到一个可以删成一个点的点集。那么如果还有其他的点,均使用这个方式即可。

2014-03-04 16:04:44 1181

原创 Codeforces Round #230 (Div. 1)__Blocked Points_取值域对称性问题

acm中取值域有对称性问题的总结

2014-03-01 10:26:37 1655

空空如也

空空如也

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

TA关注的人

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