BZOJ3251 树上三角形

<div class="post_brief"><p> 原来在win下也有敲回车的bug。开心。</p>   这题坑啊。暴力还是很好想的,如果个数超过几十个的话就肯定有解了。比较坑的是两边之和大于第三边,边权231-1然后加起来就超过int的范围了。连WA若干次再见。   #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct edge { int t; edge *next; }; const int maxn = 100009; const int maxc = 88; int n, m, v[maxn], d[maxn], fa[maxn], c[maxc]; edge *head[maxn], elst[maxn << 1], *ep(elst); void bfs() { static int q[maxn]; int hd(0), tl(1); q[0] = 1; memset(d, 0, sizeof(d)); d[1] = 1; while (hd < tl) { int p(q[hd ++]); for (edge* e = head[p]; e; e = e-> next) if (!...

January 26, 2015 · 2 min · laekov

BZOJ2419 电阻

<div class="post_brief"><p> 记得这是高一的时候ty同学和我说的东西了。然后现在才解决,可以打败上帝造题的七分钟,荣登解决时间最长的题目了。</p>   其实也就是一个高斯消元,用电势来列方程。不过高斯消元写得不熟,平时有空都写ds的题去了。以后不能再这样了。   用自己的代码高亮脚本了,虽然还不完善不过还是很开心的。   #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; const int maxn = 109; const double inf = 1e100; const double eps = 1e-8; double x[maxn], a[maxn][maxn], b[maxn][maxn]; int n, m, perm[maxn]; int main() { #ifndef ONLINE_JUDGE freopen(“in.txt”, “r”, stdin); #endif srand(19970911); while (scanf("%d%d", &amp;n, &amp;m) != EOF) { for (int i = 1; i &lt;= n; ++ i) perm[i] = i; if (n &gt; 2) random_shuffle(perm + 2, perm + n); for (int i = 1; i &lt;= n; ++ i) for (int j = 1; j &lt;= n; ++ j) if (i == j) a[i][j] = 0; else a[i][j] = inf; while (m --) { int u, v; double p; scanf("%d%d%lf", &amp;u, &amp;v, &amp;p); u = perm[u]; v = perm[v]; if (u == v) continue; a[u][v] = 1....

January 25, 2015 · 2 min · laekov

BZOJ3136 [Baltic2013]brunhilda

<div class="post_brief"><p> 决心写一道usaco之外的题,于是就挑中了这道。</p>   为啥这编辑器有BUG,每次按回车要向下跳?   发现可以预处理DP。f_i表示第i个数被砍完需要最少多少刀。对于每一个i,设p_i是它的质因子里最大的一个在给定集合里的,那么它可以转移到(i+1,i+p_i)这个范围。然后f_i显然不减,所以用单调队列之类的玩意。   然后卡着时间限制过了。不知道前面那些秒跑的人是怎么搞的。   #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 10000009; const int maxm = 100009; int k[maxn], f[maxn], n, m, q, p[maxm], v[maxm]; void pre(int n) { sort(p, p + m); memset(k, 0, sizeof(k)); for (int i = 0; i < m; ++ i) if (!i || p[i] != p[i - 1]) for (int j = 0; j <= n; j += p[i]) k[j] = p[i];...

January 23, 2015 · 2 min · laekov

BZOJ3314 [Usaco2013 Nov]Crowded Cows

<div class="post_brief"><p> 又搬blog。发现这里可以自定义css之后就果断了。</p>   写道水题试试。set的应用。然后还写丑WA了两次,我没救了。   代码高亮是坏了吗?不要吓我。   决定直接用oj7的代码版了,没有高亮就算了。 #include <cstdio> #include <algorithm> #include <set> using namespace std; typedef multiset <int> rb_tree; typedef rb_tree :: iterator rb_node; typedef pair <int, int> cow; const int maxn = 50009; int n, d, x[maxn], a[maxn], r[maxn]; cow c[maxn]; rb_tree t; int main() { #ifndef ONLINE_JUDGE freopen(“in.txt”, “r”, stdin); #endif scanf("%d%d", &amp;n, &amp;d); for (int i = 1; i &lt;= n; ++ i) { scanf("%d%d", x + i, a + i); c[i] = cow(x[i], a[i]); r[i] = 0; } sort(c + 1, c + n + 1); for (int i = 1; i &lt;= n; ++ i) { x[i] = c[i]....

January 23, 2015 · 1 min · laekov

BZOJ2693 jzptab

多组询问,硬根号。yy了一下午,在去80MSWC的时候的病历上打了若干草稿,最后硬yy出来了。 其实拿LaTeX来当公式编辑器蛮好的。 然后d(a)函数可以线性筛,讨论一下是不是倍数就行了。 发现数论真的好神奇。 lofter的html源码好讨厌啊。 #include <cstdio> #include <cstring> #include <algorithm>   using namespace std;   #define _l (long long int)   const int maxn = 10000009; const int maxq = 10009; const int mod = 1e8 + 9;   int pn[maxn], tp, d[maxn]; bool pr[maxn]; int q, m[maxq], n[maxq], t;   #define incm(_a_,_b_) { \     _a_+=_b_; \     if (_a_>=mod||_a_<=-mod) \         _a_%=mod; \     if (_a_<0) \         _a_+=mod; \ }   void pre(int n) {...

January 17, 2015 · 2 min · laekov

BZOJ2709 [Violet 1]迷宫花园

水水的二分+最短路么? 然后读入坑死了检查了好久的最短路。 没救了。 然后发现我好像进前100了,小小地开心一下。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef pair <double, int> dpr; struct edge { int v, t; edge *next; }; #define nid(_x_,_y_) ((_x_-1)*m+(_y_)) const int maxn = 10009; const int maxa = 109; const int maxe = 80009; const int mov[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; const double eps = 1e-8; int n, m, st, te, c[maxn]; char mp[maxa][maxa]; double d[maxn], tg; edge *head[maxn], *ep, elst[maxe]; dpr hp[maxe];...

January 17, 2015 · 2 min · laekov

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

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