BZOJ 题目乱做
记录一点在 BZOJ 上做的题。
众所周知原 BZOJ 炸掉了,于是跑去了 HydroOJ 的 BZOJ 域上面做。
目录
- P1001 [Beijing2006]狼抓兔子
- P1002 [FJOI2007]轮状病毒
P1001 [Beijing2006]狼抓兔子
Description
一个 \(n\times m\) 网格图,对于每个点 \((x,y)\),分别有一条无向边连向 \((x+1,y)\),\((x,y+1)\),\((x+1,y+1)\),删去一条无向边需要代价,求最终使得 \((1,1)\) 和 \((n,m)\) 之间不联通的最小代价。
数据范围:\(3\leqslant n,m\leqslant 10^3\),每条边删去的代价不超过 \(10^6\)。
Solution
根据最小割的定义可知,这题就是让我们求一个无向网格图 \((1,1)\) 和 \((n,m)\) 的最小割,于是我们套路地利用最大流-最小割定理将求最小割转化为求最大流,建图跑最大流就可以了。
Code
namespace Solution {
const int N = 1e3 + 7;
int n, m, w, S = 1, T, cnt = 1, dep[N * N], h[N * N];
struct edge {int v, to, nxt;}e[N * N * 6];
ii ID(int x, int y) {return (x - 1) * m + y;}
iv a_e(int u, int v, int w) {e[++cnt] = (edge){w, v, h[u]}; h[u] = cnt;}
iv A_E(int u, int v, int w) {a_e(u, v, w), a_e(v, u, w);}
ib bfs() {
memset(dep, -1, sizeof(dep));
queue<int> Q; dep[S] = 0, Q.push(S);
while(!Q.empty()) {
int x = Q.front(); Q.pop();
for(int i = h[x]; i; i = e[i].nxt) {
int v = e[i].to;
if(dep[v] >= 0 || e[i].v <= 0) continue;
dep[v] = dep[x] + 1, Q.push(v);
}
}
return ~dep[T];
}
ii dfs(int x, int mnflow) {
if(x == T) return mnflow;
if(!mnflow) return 0;
int res = 0;
for(int i = h[x]; i; i = e[i].nxt) {
int v = e[i].to;
if(e[i].v <= 0 || dep[v] != dep[x] + 1) continue;
int flow = dfs(v, min(e[i].v, mnflow));
e[i].v -= flow, e[i ^ 1].v += flow, mnflow -= flow, res += flow;
}
if(!res) dep[x] = -1;
return res;
}
ii Dinic() {int ans = 0; while(bfs()) ans += dfs(S, iinf); return ans;}
iv Main() {
read(n, m), T = n * m;
F(int, i, 1, n) F(int, j, 1, m - 1) read(w), A_E(ID(i, j), ID(i, j + 1), w);
F(int, i, 1, n - 1) F(int, j, 1, m) read(w), A_E(ID(i, j), ID(i + 1, j), w);
F(int, i, 1, n - 1) F(int, j, 1, m - 1) read(w), A_E(ID(i, j), ID(i + 1, j + 1), w);
write(Dinic());
return;
}
#undef int
}
P1002 [FJOI2007]轮状病毒
Description
求一个 \(n\) 轮状基能够变成多少种 \(n\) 轮状病毒。
轮状基和轮状病毒的定义见原题面。
数据范围:\(1\leqslant n\leqslant 100\)。
Solution
这里给大家介绍的是 OEIS 做法。
我们利用暴力手玩一下 \(n=1,2,4\) 的情况,发现答案分别是 \(1,5,45\)。
然后,我们将 \(1,5,16,45\) 这个数列放进 OEIS 中查找,会找到一个叫做 \(\text{Alternate Lucas numbers-2}\) 的这么一个东西。接着,我们在这个条目下面翻,翻到 FORMULA 部分,发现有个很 simple 的递推公式:
\]
然后就没了,直接用这个递推公式推出结果即可。注意,答案可能很大,要用高精。下面给出的是自带高精的 Python 3 代码。
Code
n = int(input())
a = [0, 1, 5]
for i in range(3, n + 1):
a.append(4 * a[i - 1] - 4 * a[i - 2] + a[i - 3])
print(a[n])
在线蹲一个证明方法。
BZOJ 题目乱做的更多相关文章
- bzoj 题目选做
这里将记录着我在接下来的日子里在bzoj上遇到的各种 毒瘤题目 1.轮状病毒 题目是很没意思的 列出状态 显然无法递推 我简单推了一下加动态加点的状态 嗯发现规律没有那么简单 打表 也不太能发现吧 正 ...
- CodeForces 题目乱做
是个补题记录. 1419 除了 F 场上都过了. CF1419A Digit Game 这题好多人 FST 啊-- 考虑如果串长为奇数那么最后操作的肯定是第一个人,串长为偶数的最后操作的肯定是第二个, ...
- jzyz 题库 题目选做
题库中也有很多我想不出来的模拟赛的题目.做还是必要的.做自己的题目 时间很紧 想想自己的文化课 我又没有那么强 我必须得刷. LINK:水题一道 发现是一道计数题 计数题拿高分的才是王者,但是 计数题 ...
- 2017国家集训队作业Atcoder题目试做
2017国家集训队作业Atcoder题目试做 虽然远没有达到这个水平,但是据说Atcoder思维难度大,代码难度小,适合我这种不会打字的选手,所以试着做一做 不知道能做几题啊 在完全自己做出来的题前面 ...
- 基尔霍夫矩阵题目泛做(AD第二轮)
题目1: SPOJ 2832 题目大意: 求一个矩阵行列式模一个数P后的值.p不一定是质数. 算法讨论: 因为有除法而且p不一定是质数,不一定有逆元,所以我们用辗转相除法. #include < ...
- 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做
题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...
- FFT与多项式、生成函数题目泛做
题目1 COGS 很强的乘法问题 高精度乘法用FFT加速 #include <cstdlib> #include <iostream> #include <algorit ...
- 生成树题目泛做(AD第二轮)
题目1: NOI2014 魔法森林 LCT维护MST.解题报告见LOFTER #include <cstdio> #include <iostream> #include &l ...
- bzoj题目分类
转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...
随机推荐
- 从一个小Bug,到Azure DevOps
1. 一个小Bug 最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量.那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错.经过排 ...
- pytest-rerunfailures/pytest-repeat重跑插件
在测试中,我们会经常遇到这种情况,由于环境等一些原因,一条case运行5次,只有两次成功 其它三次失败,针对这种概率性成功或失败,若是我们每次都运行一次就比较耗时间,这个时候 就需要pytest提供的 ...
- JAVA特点及安装卸载
C语言特点 1972 贴近硬件,运行速度快,效率高 操作系统,数据库,网络系统,编译器 指针和内存管理 C++语言特点 1982 面向对象 兼容C 图形领域,游戏等 Java语言特点 简单性 面向对象 ...
- IT公司都不喜欢招培训班出来的学生,那培训班的意义何在呢?
我一方面做过培训学校的老师,现在上班之余,还在培训学校做兼职老师,另一方面做过大厂和外求的技术面试官,主要是java方向的,应该对这个话题有充分的话语权. 在本文里,就从培训班的作用. ...
- Codeforces 429E - Points and Segments(欧拉回路)
Codeforces 题面传送门 & 洛谷题面传送门 果然我不具备融会贯通的能力/ll 看到这样的设问我们可以很自然地联想到这道题,具体来说我们可以通过某种方式建出一张图,然后根据" ...
- awk多文件处理时的分隔符?
目录 问题来源 解决方法 问题来源 我有两个文件,一个是plink过滤后得到的.fam文件(空格分隔):另一个是样本对应关系文件(tab分隔). 文件1: 文件2: 两个文件匹配,awk常规操作.这里 ...
- rust Option枚举
枚举 1 fn main() { 2 let a_binding; 3 { 4 let x = 2; 5 a_binding = x * x; 6 } 7 println!("a bindi ...
- EPOLL原理详解(图文并茂)
文章核心思想是: 要清晰明白EPOLL为什么性能好. 本文会从网卡接收数据的流程讲起,串联起CPU中断.操作系统进程调度等知识:再一步步分析阻塞接收数据.select到epoll的进化过程:最后探究e ...
- POLLOUT/POLLINT事件触发测试
一般poll使用过程中都是检测POLLIN事件,表示描述符有事件可以处理了,需要我们处理.对POLLOUT事件触发的方式相对较少,网上也有很多对此触发的疑问,利用实际项目中用的一个用法,下面做了个测试 ...
- A Child's History of England.19
The King was at first as blind and stubborn as kings usually have been whensoever [每当] they have bee ...