20141021 计划

好端端的上午被体检腰斩了。 早上先花两节课继续复习数学吧。 然后去写图论。 下午爬梯子和bzoj。还有高一小朋友的图论基础(虽然多半听不到两分钟就受不了了)。 然后晚上还要考试好开心。

October 21, 2014 · 1 min · laekov

BZOJ1597 [Usaco2008 Mar]土地购买

大概也不是很难。毕竟只有做水题的份。 就把原来的土地按x排个序,把能合并的合并,变成一个x单增y单减的序列。 然后就是dp。f[i] = min(f[j] + y[j+1]*x[i]),可以单调的斜率优化。 符号比较郁闷还搞错了好几次。 所以说我太弱了啊怎么办啊。 #include <cstdio> #include <algorithm> using namespace std; typedef long long qw; typedef long double exf; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif #define _l (qw) #define _f (exf) struct field { int x, y; }; inline bool cmpField(const field& a, const field& b) { return (a. x < b. x) || (a. x == b. x && a. y < b. y); }...

October 20, 2014 · 2 min · laekov

BZOJ3231 递归数列

感觉几百年没有刷bzoj了?虽然昨天才写了题,下午也还交了题的。 还是挺水的一道矩阵题。看到数列想得到矩阵,不知道没看到数列能不能想到矩阵。 关键是求和比较不好想。其实新加一行把和记下来就行了。重点就是构造对吧。 然后矩阵快速幂啥的还好。主要是要记得快速乘。(想起了zhx的babysit) #include <iostream> #ifndef ONLINE_JUDGE #include <fstream> #define cin _cin_ std :: ifstream cin("in.txt"); #endif #include <algorithm> using namespace std; typedef long long qw; const int maxn = 19; qw n, b[maxn], c[maxn], x, y, mod; qw modMul(qw a, qw b) { qw s = 0; for (; b; b >>= 1, a = (a << 1) % mod) if (b & 1) s = (s + a) % mod; return s; } class matrix {...

October 20, 2014 · 2 min · laekov

20141020 计划

突然感到noip已经很近了。 恐怕只剩下一周自己刷题了。 现在还没补完的专题?数学和图论。 今天先搞点数学题吧。 上午下午都用来刷cv好了。 晚上么,bzoj。

October 20, 2014 · 1 min · laekov

BZOJ1977 次小生成树

题意是严格次小生成树。 想了一下发现应该是一条不在最小生成树上的边构成的环上替换一条边就行了。感觉好想noi那道lct,哈。其实不用那么复杂的。 就用倍增就可以了。不过我还是比较倾向于用链剖。感觉链剖空间小而且写起来倍爽。不像倍增写挂了不只一次了。 要注意的是不仅要找最大值还要找严格次大值,因为要找严格次小。 #include <cstdio> #include <cctype> #include <memory.h> #include <algorithm> using namespace std; typedef long long qw; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif struct edge_g { int a, b, v, mk; }; struct edge_t { int t, v; edge_t *next; }; struct dat { int a, b; dat(int v0 = -1) { a = v0, b = -1; } dat(int a0, int b0) { a = a0, b = b0;...

October 19, 2014 · 4 min · laekov

CodeVS3147 矩阵乘法2

居然继续沦落到写CV的题解的地步了。 这又是一道坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑坑题。 思路很简单。就是记a的列前缀和和b的行前缀和,每次询问的时候O(n)的扫一遍乘积累和。 但是,极限数据本地要跑3.2s。虽然我笔记本是慢,但是也不能这样玩我啊。交了好久都在tle。 最后想到一个常数优化的办法。因为每次是把一行或者一列的数都访问一遍,所以用一个指针把数组的那一行记下来。这样寻址会快一些。事实证明快了不只一些。 坑,哈哈。 #include <cstdio> #include <cctype> #include <memory.h> #include <algorithm> using namespace std; typedef long long qw; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif #define _l (qw) #define readInt(_s_) {\ int _d_;\ _s_ = 0;\ while (!isdigit(_d_ = getchar()));\ while ((_s_ = _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\ } const int maxn = 2001; int a[maxn][maxn], b[maxn][maxn], n, m; int main() { readInt(n);...

October 18, 2014 · 1 min · laekov

20141018 计划

早上adam发话说要好好准备noip。 不能再颓废下去了。 tyvj520了。所以先让它好看一点吧。那么今天去爬cv的天梯好了。好多恶心的代码题也可以写一写了。 下午的话继续。 晚上大概可以回家了。然后有bc吧。

October 18, 2014 · 1 min · laekov

SPOJ4487 GSS6

看上去挺水水水水水水水水的一道平衡树维护序列的数据结构题啊。 先用split-merge tree写,tle。 然后改用splay,tle。 最后据说把splay的裸数组改到struct node里就能过。于是再写了一个程序来改代码。 不 带 这 么 坑 的 ! #include <cstdio> #include <cstdlib> #include <cctype> #include <memory.h> #include <algorithm> using namespace std; /*#define readInt(_s_) {\ int _d_;\ bool _nag_ = 0;\ _s_ = 0;\ while (!isdigit(_d_ = getchar()))\ if (_d_ == '-')\ _nag_ = 1;\ while ((_s_ = _s_ * 10 + _d_ - 48), isdigit(_d_ = getchar()));\ if (_nag_)\ _s_ = - _s_;\ }*/ #define readInt(_s_) scanf("%d",&_s_); #define readOpt(_s_) {\ do\ _s_ = getchar();\ while (_s_ != 'I' && _s_ != 'D' && _s_ !...

October 17, 2014 · 4 min · laekov

20141017 计划

上午要考试。 下午把昨天的题补了吧。然后也去打打球啥的。 晚上补一补文化课好了。好像已经欠了好多了。唉。不好好刷题就只有刷53,好好刷题也匆忘53。

October 17, 2014 · 1 min · laekov

20141016 计划

早上来先修椅子,敲钉子*5min。yzy:修凳子哪家强?... 昨天晚上tyvj终于-- rank了,开心。 上午先补一补觉,然后去做模拟题好了。 下午到bzoj上去逛逛,找点数据结构来做吧。 晚上依稀记得要上课。好久没跑成步了怎么办啊。

October 16, 2014 · 1 min · laekov