摘要: 题意: 知道了一个数轴,对应两种操作 0 x 在x位置放置一个食物 1 让小强吃掉一个距离它最近的一个食物,如果左右食物距离一样,方向取和上一次的那个一样 小强一开始在位置0,问最后小强经过的最短距离是多少分析: 开两个有限队列,分别保存小强左面食物的位置和右面食物的位置,模拟过程即可。#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;#define maxn 100005#define clr(x)memset(x,0 阅读全文
posted @ 2012-09-15 17:55 'wind 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 n 个变元,给出了 m 个他们中的一些元素的关系,问是否存在合法的取值方案。分析: 典型的2—SAT,在有冲突的取值方案之间连边, x 表是x取真,x+n表示x取假 建图:a and b ==1 , !a->a , !b -> ba and b ==0 , a->!b , b->!a a or b ==1 , !a->b , !b->a a or b ==0 , a->!a , b->!b a xor b ==1 , a->!b,!b->a,!a->b,b->!a a xor b ==0 , a->b,b 阅读全文
posted @ 2012-09-15 13:12 'wind 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题意:n个点的一棵树,其中有k个敌人所在结点,要破坏一些边使得这 k 个点互不可达,求出破坏边的最小权值和。分析:对于有n个结点的树,删除任意的k (k<=n-1)条边都能将原树分成k+1个部分 按照题意至少需要将原树划分成 k 个部分(此时每部分中都包含一个敌人的点),删除的边数为k-1。 类似kruskal最小生成树的过程,不过此处将边按权值从大到小排列,每次将边加进来时要判断是否会使两个危险的 点连通,是的话这条边就是需要被删除的,否则将它加到树上。#include<stdio.h>#include<string.h>#include<stdlib.h 阅读全文
posted @ 2012-09-15 11:40 'wind 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 题意: 有 n 个物品,每个物品都有一定的价值和花费,而且买的时候自己的钱不能低于那个物品的指标,问最后可以买到的物品的最大价值是多少。分析: 需要对物品按 qi-pi 的值从小到大排序,因为这样可以保证每次更新的状态值从小到大递增,前面更新过的状态不会影响后面更新的状态。#include<stdio.h>#include<string.h>#include<algorithm>#define clr(x)memset(x,0,sizeof(x))#define max(a,b)(a)>(b)?(a):(b)using namespace std;st 阅读全文
posted @ 2012-09-15 08:46 'wind 阅读(644) 评论(0) 推荐(0) 编辑