上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 16 下一页
摘要: 题意:给你一个有向图,第一类边是从第i个点到第i+1个点的,还有多出来的m条二类边,是从u到v的,同样是有向的。然后你要处理询问,从u到v经过最多一次二类边的最短距离是多少。题目我觉得是神题,然后看了网上的一些神解法,其中一个非常neatly,在此说下感想。首先我们考虑的是(uv)的,是不可能用到的。然后我们想,从u到v的最短距离,就是利用u+1~v中的某个起点的二类边到达某个点k(uv)的询问的时候,所有的二类边(uv1的边,然后从v1到达v,区间顺序如下:(v1,v,u,u1),那么花费究竟什么时候最少呢?我们如何利用u1->v1这条边去更新呢?不难发现,我们实际上的距离其实就是 d 阅读全文
posted @ 2014-03-30 20:57 chanme 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 第一道点在多边形内的判断题,一开始以为是凸的。其实题意很简单的啦,最后转化为判断一个点是否在一个多边形内。如果只是简单的凸多边形的话,我们可以枚举每条边算下叉积就可以知道某个点是不是在范围内了。但对于更一般的多边形,要采用的方法可能就要复杂一些,其中一种是叫做射线法的东西,在该点上画一条射线,如果射线与多边形偶数次相交,则说明点在多边形外,否则在多边形内。实践中可以取水平的一条,至于怎么判断就要看下代码了,判断的过程中如何发现点已经在多边形上了则直接返回。计算几何做的少,则是算是补充了一个盲区吧。#pragma warning(disable:4996)#include#include#inc 阅读全文
posted @ 2014-03-30 19:01 chanme 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 组队赛的时候的一道题,那个时候想了一下感觉dp不怎么好写呀,现在写了出来,交上去过了,但是我觉得我还是应该WA的呀,因为总感觉dp的不对。#pragma warning(disable:4996)#include#include#include#include#include#include#define maxn 150using namespace std;struct Edge{ int v, w; Edge(int vi, int wi) :v(vi), w(wi){} Edge(){}};vector G[maxn];int n, q;int dp[maxn][maxn];int t 阅读全文
posted @ 2014-03-28 23:46 chanme 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题目挺水的,但由于其独特的阅读量比赛的时候没发现这道水题,在此做一下翻译,如果有人搜到这翻译的话有帮助的话自然最好啦。中国队平局进入最后的点球决胜局,首先抛硬币决定谁先罚球,然后先是罚五球,如果罚的过程发现某一方不可能再胜出了,那么就不需要再踢下去。假如踢完5球之后还是平局,那么就由剩下的人继续踢球,已经踢过的人可以再踢的条件是他的所有队友都踢过了,所以先是前5个人踢,然后后6个人踢,如果其中一方比对方多一分就直接结束了,否则的话继续踢下去,如果11个都踢完了就再重复的踢一下,不停地重复直至决出胜负。犯了个SB错误,while(~scanf("%d",&tmp)!= 阅读全文
posted @ 2014-03-28 22:19 chanme 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 连续两天学了一些numerical analysis的方法,昨天是学了一下三分,今天学了一下模拟退火。很早就听说了模拟退火在求费马点上的运用了,只知道一些大概,但是没有深入研究,碰到题目就卡壳了,现在算是补一下这种方法的思路。模拟退火就是随机一些起点,然后定一个步长,每次在k个方向上去走这个步长,看下哪个方向最优,最优的话则留下来,然后步长*p,p就是控制的系数,然后如此重复。当然退火的含义就是有些时候我们会选择跳出当前的局部最优解,这个概率是预先设定的,在今天这题里貌似也不需要设定这样的概率,感觉有种水过去的感觉,贴一记代码#pragma warning(disable:4996)#incl 阅读全文
posted @ 2014-03-27 22:31 chanme 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 算是学了图dp后的第一次应用吧。题目其实真的是非常不严谨,什么都没说,基本靠猜,而且严格来说数据应该会有爆int的,不过不管那么多啦,思路对了就好- -0#include#include#include#include#include#include#include#define ll long long#define maxn 5000#define maxm 1000000#define inf 0x3f3f3f3fusing namespace std;vector G[maxn+50];struct Node{ int v,k; Node(){} Node(int vi,int ki) 阅读全文
posted @ 2014-03-27 18:41 chanme 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 晦涩的题意+各种傻逼害我调了那么久,实际上题目就是一个dp[i][j],dp[i][j]表示第i层第j个最少需要多少时间,当我们去更新dp[i][j]的时候,考虑的是从第i+1层的某一个dp[i+1][k]往上顶一层,然后走到dp[i][j]的位置,当然往上跳的时候要注意不要碰到怪物墙壁,各种坑,我的码力果然不行呀- -0#pragma warning(disable:4996)#include#include#include#include#include#include#include#define maxn 2500#define maxw 220using namespace std; 阅读全文
posted @ 2014-03-27 00:48 chanme 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个立体的图形,上面是圆柱,下面是圆台,圆柱的底面半径和圆台的上半径相等,然后体积的V时,问这个图形的表面积最小可以是多少。(不算上表面)。一开始拿到题以为可以YY出一个结果,就认为它是圆锥,赛后才知道原来要三分三分再三分。 就是对上下体积三分,对上半径和下半径三分。至于为什么是凸的貌似也不怎么好想,但是我后来确实发现单纯的圆锥肯定取不到最大值,这题就当作是学习三分的技巧啦- -0#pragma warning(disable:4996)#include#include#include#include#include#include#include#define ll long lo 阅读全文
posted @ 2014-03-26 16:39 chanme 阅读(204) 评论(0) 推荐(0) 编辑
摘要: #pragma warning (disable:4996)#include#include#include#include#include#include#include#define maxn 150using namespace std;int n;struct Segment{ double l, r, x; int li, ri; bool isleft; bool operator > 1; build(i > 1; if (R = M) add(i 0) return N[i].len; else if (N[i].r - N[i].l > n&& 阅读全文
posted @ 2014-03-24 21:39 chanme 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 当时区域赛的一道题。题意大概是这样的,有一个1~N的图,然后你要从1-》N,其中每经过一条边需要消耗你的时间和金钱,每到一个地方可以选择什么都不做,或者买一包盐,卖一包盐,身上不能同时有超过B包盐,然后你还可以从当前所在的世界i转道(i+1)modK的世界,每次转换花费时间1,然后问你在T时间内到达n点的时候你最多能有多少钱。 那个时候不会做是因为不知道如何控制dp的方向,我记得那个时候我已经把状态写好了,转移也是知道的,就是不知道转移的方向,后来发现时间的那一维是降的,于是我们就可以建一个优先队列,把一开始的状态压进去,然后拓展新的状态,这样就可以做出来了,调了很久,因为我心里认为它是无向图 阅读全文
posted @ 2014-03-19 23:26 chanme 阅读(147) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 16 下一页