上一页 1 ··· 22 23 24 25 26
摘要: 这题剧情就是粑粑出发去找他那淘气的儿子。建模比较麻烦,把每个点的坐标扩大两倍然后把墙坐标点和房间都转化成相应的点来处理,然后存到二维数组中bfs。要注意的是儿子的初始坐标可能不在题目描述中的0,199的范围内,或者根本没有任何墙,出现这些情况的时候直接输出0就好了,不然吃RE,我就是狂吃了近10个RE去看discuss才发现的。。真是囧#include #include #include #include #define wall -1#define door 1using namespace std;const int maxn = 205;int maze[maxn * 2][maxn * 阅读全文
posted @ 2014-01-13 16:27 acm_roll 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 给定m,n求gcd(fib(m),fib(n))利用具体数学里面的一个公式,可以转化成求fib(gcd(m,n)),不过题目给的范围到了10^9,因此这里要采用矩阵连乘法来求斐波那契数。第一次写矩阵快速幂,写的比较挫#include #include #define mm 10003 using namespace std; struct mat { int data[2][2]; mat() { memset(data,0,sizeof(data)); }; mat(int a,int b,int c,int d) { data[0][0... 阅读全文
posted @ 2014-01-01 12:27 acm_roll 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 以前没写过带小数的高精度,这题仅仅要求实现加法,我依旧写的做很挫,还WA了两次。注意求和之后去除后缀的无用0#include #include #include #include #define max(a,b) (((a)>(b))?(a):(b))using namespace std;class bign { public: int id[1000],sd[1000],ilen,slen; bign():ilen(0),slen(0) { memset(id,0,sizeof(id)); memset(sd,0... 阅读全文
posted @ 2013-12-31 20:32 acm_roll 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 简单的博弈DP爆搜改成记忆化搜索会爆栈,改成递推就好了。稍微用位运算优化了一下。。不过还是很慢#include #include #include #define Win 0#define Lose 1 using namespace std; int S[11],N,M;char note[100001]; inline char dp() { int n,p,i,j; for(i = 0;i < S[0];i++) note[i] = note[i] = Lose; for(i = S[0];i <= N;i++) { note[i] = 0; ... 阅读全文
posted @ 2013-12-20 17:34 acm_roll 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 复杂模拟,注意如果解题数目和解题总时间是一样的情况下两个人的名次是一样的。人的名次等于比他做得好的人数+1还有时间如果不足10要补零#include #include #include #include #include #include #include using namespace std; struct time { int h,m,s; time(int hh,int mm,int ss):h(hh),m(mm),s(ss){}; time():h(0),m(0),s(0){}; string tostr() { ostringstream s... 阅读全文
posted @ 2013-12-20 17:30 acm_roll 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 最裸的求区间最大递增子序列,单点更新区间合并线段树,存下来当个模板吧 #include using namespace std;#define M ((L+R)>>1)#define lson rt(b))?(a):(b))#define min(a,b) (((a) M) return query(rson,ql,qr); int ans = 0,left = query(l... 阅读全文
posted @ 2013-12-14 23:41 acm_roll 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 有N个村庄,只要村庄没有被摧毁就可以相互联系,一个村庄可以通过村庄和其他村庄联系,敌人会摧毁某个特定的村庄,然后我放可以修复最近被摧毁的村庄,然后询问第k个村庄最多可以联系到几个村庄(包括自身)求最大连续值问题,线段树维护区间最大连续长度,然后区间合并。查询的时候累加左右两边的连续值即可,注意连续区间是否会断开。比较坑人的是这题是多组数据。。而且每个村庄可以被多次摧毁,此时不用更新标记但是要更新栈。。就为了这两个问题WA了超多次。。 1 #include 2 #include 3 4 #define M ((L+R)>>1) 5 #define lson rt<<1,L 阅读全文
posted @ 2013-12-14 23:38 acm_roll 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 线段树的离线查询,把查询存起来按照h排个序,把砖的高度也存起来按照h排个序,然后按需把砖头update进线段树就好了。 一开始傻了吧唧的h每增加一次rebuild一次树,后来才意识到build一次是nlogn的,我囧,还傻傻的搞了一些常数优化。。 最后看着改了一下,写得比较挫。。不过速度还是比较快的 #include #include #include using namespace ... 阅读全文
posted @ 2013-12-10 22:53 acm_roll 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 最裸的线段树单点替换,区间查找最大值。#include #include using namespace std;#define M ((L+R)>>1)#define lson rtb)?a:b)const int maxn = 200001;int maxv[maxn M) update(rson); pushup(rt); }}int query(int rt,int L,int R) { if(ql = R) return maxv[rt]; int lv = -INT_MAX,rv = -INT_MAX; if(ql M) rv = quer... 阅读全文
posted @ 2013-12-10 20:05 acm_roll 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 刚学习线段树,先写一个最裸的单点更新。听大大们说线段树是一种非常经典而又灵活的数据结构。一步步学起吧。这里先写个静态的版本。 模板是模仿某位大大的。。#include #define lson rt> 1; build(lson); build(rson); pushup(rt); }}void update(int rt,int L,int R) { //更新点 if(L == R) sum[rt] += v; else { int M = (L + R) >> 1; if(tar M) update(rson);... 阅读全文
posted @ 2013-12-10 19:41 acm_roll 阅读(163) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26