上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页
摘要: 来源: 吴垠的日志一些题外话首先就是我为什么要写这么一篇日志。原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入门。其实就现在而言,我并不是很想和人再去讨论这样的话题,特别是当我发现我有很多的东西要学的时候,我实在是不想花太多的时间在这种问题上。但是我当年也是纯凭热情搞ACM过来的,实在是不忍心打击一个同样有着满腔热情的起步者。所以干脆就多花点时间,总结一下我的一些观点和看法,以后再让人问起这个问题的时候,也好不用再重复什么了。其次,我在这篇文章中并不打算探讨特别细节的问题,比如说如果某些人想从中得到诸如“该看哪本书入门比较好”或者“动态规划、搜索、图论该怎么学”之类问题的答案 阅读全文
posted @ 2013-09-15 22:35 冰鸮 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 空间异面直线的距离直接套模板。求交点:求出两条直线的公共法向量,其中一条直线与法向量构成的平面 与 另一条直线 的交点即可。还是套模板o(╯□╰)o1.不会有两条线平行的情况。2.两条直线可能相交#include #include #include #include #include using namespace std;const double EPS = 1e-9;const int MAXN = 40;struct Point3 //空间点{ double x, y, z; Point3( double x=0, double y=0, double z=0 ): x(x... 阅读全文
posted @ 2013-09-15 19:38 冰鸮 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 线段树成段更新+区间最值。注意某人的乘车区间是[a, b-1],因为他在b站就下车了。#include #include #include #include #define lson l, m, rt > 1; build( lson ); build( rson ); return;}void PushUp( int rt ){ maxi[rt] = max( maxi[lc], maxi[rc] ); return;}void PushDown( int rt ){ if ( lazy[rt] ) { lazy[lc] += lazy... 阅读全文
posted @ 2013-09-15 11:01 冰鸮 阅读(241) 评论(0) 推荐(0) 编辑
摘要: M=1:aaaaaaaa……M=2:DFS+manacher, 暴出N=1~25的最优解,找规律。N8时,头两个字母一定是aa,剩下的以aababb循环,最后剩余#include using namespace std;const char str[] = "aababb";int main(){ int T; int cas = 0; scanf( "%d", &T ); while ( T-- ) { int M, N; scanf( "%d%d", &M, &N ); printf("Case 阅读全文
posted @ 2013-09-14 21:54 冰鸮 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 成功袭击次数=所有袭击次数-成功防守次数需要一个辅助pre来记录上一次袭击成功什么时候,对于每个查询,从上一次袭击成功开始,每隔t更新一次。感觉这样做最坏时间复杂度是O(n^2),这里 说是O(q)*O(q/t)log(n),应该是超时边缘。能AC或许因为数据不强。PS.初始化的时候直接memset会超时,每次根据N的大小build线段树,memset也根据N的大小来就能AC。#include #include #include #define lson l, m, rt >1)); sum[rc] += flag[rt]*(m>>1); flag[rt] = 0;... 阅读全文
posted @ 2013-09-14 21:30 冰鸮 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 以下摘自SPOJ泛做表格:题意:给定一个星形多边形,而且给出了一个可以看到形内所有点的位置(我们称这个点为观察点),让你判断有多少个点位于多边形内。时间复杂度:O(mlogn)将多边形上的点按极角排序,观察点与多边形上任意相邻两点形成若干个三角形,再按照极角查找给定点可能位于哪个三角形,最后用叉积判断它是否真的在那个三角形内。注意细节,给几组数据:input84 12 2-2 22 -2-2 -23 36 62 24 46 6-3 1-1 -15 15 12 26 67 71 13 322 152 02 24 45 51 50 5-1 5-5 5-4 4-3 3-2 2-2 0-2 -2-3 阅读全文
posted @ 2013-09-13 22:22 冰鸮 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 《训练指南》p.108#include #include #include using namespace std;const int MOD = 1000007;const int MAXN = 500;int C[MAXN][MAXN];void init(){ memset( C, 0, sizeof(C) ); C[0][0] = 1; for ( int i = 0; i < MAXN; ++i ) { C[i][0] = C[i][i] = 1; for ( int j = 1; j < i; ++j ) C[i][... 阅读全文
posted @ 2013-09-11 21:42 冰鸮 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 统计正面看高度为i的竖条个数为cnt1[i],统计侧面看高度为i的竖条个数为cnt2[i];ans = sum( i * max( cnt1[i], cnt2[i] ) ); ( 1 #include #include #include using namespace std;int cnt1[30];int cnt2[30];int main(){ int W, D; while ( scanf( "%d%d", &W, &D ), W || D ) { memset( cnt1, 0, sizeof(cnt1) ); memset( cnt2,... 阅读全文
posted @ 2013-09-11 20:54 冰鸮 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 主要是建图,建好图之后跑一边dijkstra即可。一共3N个点,1~N是原图中的点1~N,然后把每层x拆成两个点(N+x)[用于连指向x层的边]和(N+N+x)[用于连从x层指出的边]。相邻层节点互相可达:AddEdge( N+N+x+1, N+x, C), AddEdge( N+N+x, N+x+1, C);对于位于x层的节点i,AddEdge(N+x, i, 0), AddEdge(i, N+N+x, 0);#include #include #include #include #include using namespace std;const int MAXN = 100010*3;c 阅读全文
posted @ 2013-09-11 20:32 冰鸮 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 参考了:http://www.cnblogs.com/zhsl/archive/2013/08/10/3250755.htmlhttp://blog.csdn.net/chaobaimingtian/article/details/9852761题意:一个有n个节点的树,每个节点存有一份独一无二的信息,要求用最小的步数,把每个节点的信息共享给所有的节点。一个节点把自己所包含的所有信息传递给相邻的一个节点为一步。题目不是求最小的步数,而是问最小的步数下,信息传递的方法有多少种。分析:最小步数:所有节点把信息传给同一个节点,再由这个节点传给其他节点。因此最小步数为树边数的2倍,即2*(n-1)。我 阅读全文
posted @ 2013-09-10 18:39 冰鸮 阅读(587) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 25 下一页