BZOJ1273 [BeiJingWc2008]序列

逃掉数学考试。感觉解几纯粹不给人希望。 这题还是比较有意思。做法是把每位分开预处当总共加了多少的时候这一位上是1的数字有多少个。然后每一层是线性的。询问是O(1)的。 然后发现自己的代码能力已经没救了。 #include <cstdio> #include <cstring> #define pow2(x) (1<<(x)) typedef long long dint; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif const int maxn = 100009; const int maxl = 16; const int maxv = pow2(maxl) - 1; int n, m, c[maxv + 3], *t[maxl], b; dint s; void pre() { for (int i = 0; i < maxl; ++ i) { int len(pow2(i)); t[i] = new int[(len << 1) + 3]; t[i][0] = 0; for (int j = 0; j <= maxv; ++ j)...

January 16, 2015 · 1 min · laekov

20150116

感觉自己坚持不下去了。 现在真不知道为什么要回去上课。好多次想跑掉然后还是没有跑。毕竟还是,唉。 物理十分钟够我想一道选择题还多半是错的。化学生物英语啥的基本就是不会。zhx告诉我回去可以拿数学RANK1然后发现解析根本做不了。想起初中的时候很自豪地认为我的解析几何很厉害。现在才学会做人。 上课还是那种走神的样子。也没有想OI的题,也不想听课。不知不觉就跑掉了。最后只有利用上课的时间做作业。然后,不会,不开心,担惊受怕。 每天唯一的娱乐就是晚上去码一下OJ。然后发现我的东西写得太丑,如果数据量一大根本就handle不了。当初做的时候也是边做边改,好多东西根本就不科学。但是也不想重新来写。于是乱七八糟的东西越堆越多。 发现自己好像很少认真想过如果滚掉了会怎样。每次都推说去学校对面电脑城修电脑好了。但是世界真的允许我这样做吗?也许如果真的那样的话会过一个很痛苦的高三然后再上一个很痛苦的大学然后痛苦一辈子?不知道。只能说不上一个好的大学也不一定就没有好的前途吧。但是好的前途是什么?我发现我连这样简单的问题都没有想清楚。所以说造成恐惧的不是对现实的无力,而是对未来的迷惑? 不知道。 看到昨天的情系母校,最大的感慨是大学也不是天堂。大学有更多更麻烦的事情要去做。去上大学也不过是换个坑而已。要找到自己真正喜欢的事情?依然难。而再以后呢?工作?我只能推断它是一个更大的火坑。怎么办? 还没想清楚。 魏总说过的一句话很有道理,noi金牌这条路至少在这里是不会断的。我想这也是我现在唯一能抓住的东西了吧。不管怎样,下周就期末考试了。在我退役之前大概是不会再有这样的苦日子了。但是也是时候去学会成熟了。 期末需要加油,未来更要加油。 Historical Comments Unknown friend at 2015-01-16T23:02:27 找到适合自己的路才是最重要的 想走就走吧 Unknown friend at 2015-01-17T12:18:11 谢谢

January 16, 2015 · 1 min · laekov

BZOJ2393 Cirno的完美算数教室

充分证明我已经学傻了。把ONLINE_JUDGE打成ONLINE_JUGE还WA了若干次。然后开了个10^10的数组直接CE还想了好久是怎么回事。 10^10大概会TLE,真正的数据大概只有10^9。 做法比较简单直接容斥+剪枝,反正凑起来的几个数不会很多。 #ifndef ONLINE_JUGE #include <cstdio> #include <algorithm> using namespace std; typedef long long dint; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif const int maxa = 2048; const dint maxn = 10000000000LL; //const dint maxn = 100000LL; int e, t; dint l, r, s, a[maxa], ans; bool g[maxa]; void pre() { t = 0; for (int l = 1; l <= 10; ++ l) for (int j = 0; j < (1 << l); ++ j) {...

January 11, 2015 · 2 min · laekov

BZOJ2813 奇妙的Fibonacci

的确比较奇妙。 有一个奇妙的玩意是fib[gcd(i, j)] == gcd(fib[i], fib[j])。(fib[1] = fib[2] = 1) 然后就比较可搞了。 线性筛处理每个数的因子个数和因子和。开一点变量然后推一下就出来了。 然后要注意fib[2]也可以整除所有奇数,包括1。表示在这上面坑了2次提交。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define _l (long long int) const int maxn = 10000009; const int mod = 1000000007; int tp, pn[maxn], sa[maxn], sb[maxn], b[maxn], c[maxn]; bool pr[maxn]; void pre(int n) { memset(pr, 0, sizeof(pr)); tp = 0; sa[1] = 1; sb[1] = 1; b[1] = 1; c[1] = 0; for (int i = 2; i <= n; ++ i) { if (!...

January 8, 2015 · 2 min · laekov

BZOJ3522 [Poi2014]Hotel

水水的dp。拿pascal玩玩边表。然后莫名其妙地发现在main上先是ce然后全wa。下到数据一测就过了,交bzoj还是过了。不开心。 必定是一个中间点然后连三条出去。所以直接枚举中间点然后bfs就好了。相当于每条边被转移了两次所以还是O(n^2)的。最初想错了想成三方了把自己吓了一跳。 pascal啊。 type edge = ^edger; edger = record t: longint; next: edge; end; const maxn = 5009; //ONLINE_JUDGE = false; ONLINE_JUDGE = true; var n, i, j, u, v: longint; ans: int64; d, cd, sd, td: array [0 .. maxn] of longint; head: array [0 .. maxn] of edge; ei: edge; procedure addEdge(u, v: longint); var ep: edge; begin new(ep); ep^. t := v; ep^. next := head[u]; head[u] := ep; end;...

January 8, 2015 · 2 min · laekov

BZOJ3851 2048

题号是3851,题目名称是2048。 比较厉害的DP。最初没有想到怎么表示状态。其实就是一个≤2048的自然数就可以表示状态了。 然后转移不能一个一个来,每个值要一起来, 然后拿组合数来算。然后就行了。 虽然hdu上还是过不到。好慢的说。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define _l (long long int) const int maxn = 100009; const int mod = 998244353; int n, f[2][2051], c[2051]; int fac[maxn], finv[maxn], p2[maxn]; int modPow(int a, int x) { int s(1); for (; x; x >>= 1, a = _l a * a % mod) if (x & 1) s = _l s * a % mod; return s;...

January 8, 2015 · 2 min · laekov

BZOJ2527 [Poi2011]Meteors

全局二分+树状数组,其实还是比较水。 比较坑的一点是直接求和会暴long long。如果≥Pi了要直接break掉。好坑啊。 #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> using namespace std;  int _d_; #define readInt(_x_) { \ int& _s_ = (_x_ = 0); \ while (!isdigit(_d_ = getchar())); \ while (_s_ = (_s_ << 3) + (_s_ << 1) + _d_ - 48, isdigit(_d_ = getchar())); \ } typedef long long dint; const int maxn = 300009; struct node { int v; node *next; }; struct rain { int l, r, a; }; struct bintree { dint t[maxn]; int n; bintree() {...

January 8, 2015 · 3 min · laekov

BZOJ1112 [POI2008]砖块

水一发。 本来可以直接拿主席树找中位数的,但是因为main上只有32MB,所以只好写了个splay。感觉现在是爱上指针了。然后kth的时候少打个等号又wa又re好爽。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long dint; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif #define _l (long long int) const int maxn = 100009; #define nsz(p) ((p)?(p->sz):0) #define sof(p) ((p)?(p->s):0) struct splay_node {    int v, sz;    dint s;    splay_node *ls, *rs, *pt;    inline void init(int v0) {    v = v0;    sz = 1;    s = v0;    pt = ls = rs = 0;...

January 7, 2015 · 3 min · laekov

BZOJ1097 [POI2007]旅游景点

比较简单易懂的状压。 最初想懒一下把起点和终点也压进来然后发现刚好会超一点空间。然后不压进来的话就是100MB左右,很好奇MAIN上面64MB的内存应该怎么做。拿MAP么? 代码各种难看啊郁闷。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct edge { int t, v; edge *next; }; #define pow2(x) (1<<(x)) typedef pair <int, int> dspr; const int maxn = 20009; const int maxe = 400009; const int maxk = 20; const int maxz = pow2(20) + 3; int n, m, k, d[maxn]; int f[maxz][maxk], ds[maxk], dt[maxk], dk[maxk][maxk], ans; int g, pr[maxk]; edge *ep, *head[maxn]; dspr hp[maxe]; inline void addEdge(int u, int v, int w) {...

January 7, 2015 · 2 min · laekov

BZOJ3858 Number Transformation

yy了一个sqrt的玩意,不过因为n在变所以没有保障啊。 肯定不是正解了。 1s的题跑了1.3s居然AC,好厉害。 #include <cstdio> typedef long long dint; #ifdef WIN32 #define lld "%I64d" #else #define lld "%lld" #endif dint calc(dint n, dint k) { if (n <= 1) return k; for (dint i = 1, j; i <= k; i = j + 1) { if (n <= i) return k; j = (n - 1) / ((n - 1) / i); if (j > k) j = k; n = ((n - 1) / i + 1) * j; } return n;...

January 6, 2015 · 1 min · laekov