摘要: 题意:多边形的顶点坐标为整数,问多边形内部的整点数,边上的整点数,面积。 分析:向量(0,0)->(x,y)上的整点数为gcd(x, y), pick定理:面积 = 内部整点数 + 边上整点数/2 - 1. const int M = 105; int m, in, on; double s; in 阅读全文
posted @ 2013-07-06 15:24 心向往之 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意:人有100血和100魔法,每秒增加 t 魔法(不能超过100)。n个技能,每个技能消耗a[i]魔法值,造成b[i]伤害。普通攻击不消耗魔法,每秒1伤害。boss有100血,每秒对人造成q伤害。每秒内,人先攻击,boss后攻击。问最少多少秒杀死boss?分析:boss对人每秒q伤害,人的死亡时间是确定的,T = 100/q + ( 100%q?1:0 )。普通攻击可看作a=0 b=1的技能。dp(i, j)表示第i秒,魔法值j,boss的最少血量。 dp(i, jj) = min dp(i-1, j) - b[k] jj = min( j-a[k]+t, 100 )const in... 阅读全文
posted @ 2013-07-06 14:05 心向往之 阅读(291) 评论(0) 推荐(0) 编辑
摘要: poj 1330 裸LCA#define M 10005int parent[M]; // 根节点int Find(int i){ int j; for(j = i; j != parent[j]; j = parent[j]); while(i != j){ int temp = parent[i]; parent[i] = j; i = temp; } return j;}void Union(int a, int b){ int x = Find(a), y = Find(b); if(x == y) return... 阅读全文
posted @ 2013-06-26 20:25 心向往之 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题意:1 区间每个数加D2 区间翻转3 区间向右滚动T次 12345滚动1次为512344 第x个数后面添加p5 删除第x个数6 询问区间最小值分析:结点[0]的信息不能修改,原因不明。。。翻转操作不能直接rev[x]=1, 而要rev[x]^=1。 keyTree未必已经pushDownpushDown(x) if(x==0)return; 可以节省不少时间#define keyTree (ch[ ch[root][1] ][0])const int vaf=0x7fffffff;const int MaxN = 100005;struct SplayTree{ int sz[M... 阅读全文
posted @ 2013-06-22 16:25 心向往之 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题意:给定数列,要求每次找到最小的数,输出是第几个,将其本身连同左边翻转,然后删除这个数。如果最小的数不止一个,则取元数列中靠前的那个。分析:要注意边界情况,以及孩子为0的情况 。结点存储原数列中的下标,子树中最小元素的下标。为了找到最小元素,还要存储最小元素来自左子树还是右子树。#define keyTree (ch[ ch[root][1] ][0])const int vaf=0x3fffffff;const int MaxN = 100005;struct SplayTree{ int sz[MaxN]; int ch[MaxN][2];//ch[][0]左孩子 ch[]... 阅读全文
posted @ 2013-06-22 16:22 心向往之 阅读(297) 评论(0) 推荐(0) 编辑
摘要: poj1151 矩形面积并 离散化+排序+扫描线int NUM,FLAG;double BIT; //long long float#define DIG(a) (((a)>='0')&&((a)>1; if(a==c&&b==d) T[i].cover+=val; else if(d=m) UpDate(rson,c,d,val); else{ UpDate(lson,c,m,val); UpDate(rson,m,d,val); } if(T[i].cover>0) { T[i].s=hashx[b]-has... 阅读全文
posted @ 2013-06-22 15:52 心向往之 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 题意:三种动物,A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 当前的话与前面的某些真的话冲突,就是假话; 2) 当前的话中X或Y比N大,就是假话; 3) 当前的话表示X吃X,就是假话。 输 阅读全文
posted @ 2013-06-22 14:19 心向往之 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 题意:求从A点到所有点的最短距离 + 所有点到A点的最短距离 之和的最大值正反两次dijkstra#define M 1001struct Node{ int v,val,next;}edge[2*M*M];int len;int head1[M],head2[M], n,rt;int dist1[M],dist2[M], pre[M],vis[M];void add(int &kind,int v,int val){//起点 终点 权值 edge[len].next=kind; edge[len].v=v; edge[len].val=val; kind=... 阅读全文
posted @ 2013-06-21 13:29 心向往之 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题意:判是否有负环分析:SPFA 入队n次以上有负环#define M 505struct Node{ int v,val,next;}edge[M<<4];int len;int head[M], n, rt;int dist[M], pre[M], vis[M], times[M];void add(int &kind, int v, int val){//起点 终点 权值 edge[len].next = kind; edge[len].v = v; edge[len].val = val; kind = len++;}deque<int> que;... 阅读全文
posted @ 2013-06-21 13:26 心向往之 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题意:股票经纪人要在一群人中散布一个传言,传言只能在认识的人中传递,题目将给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间,要求程序给出以哪个人为起点,可以在好事最短的情况下,让所有人收到消息。分析:先求出每个人向其他人发信息所用的最短时间,然后在所有能向每个人发信息的人中比较他们所用最大时间,找出所用最大时间最小的那一个。#define M 105int maze[M][M],n;//int pre[M][M];void floyd_warshall(){ FOR(k,0,n) FOR(i,0,n){ if(i==k)conti... 阅读全文
posted @ 2013-06-21 13:25 心向往之 阅读(250) 评论(0) 推荐(0) 编辑