自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (1)
  • 收藏
  • 关注

原创 BZOJ 1095 ZJOI 2007 Hide 捉迷藏 动态点分治

动态点分治? 就是内存卡的很紧?用了154MB。。。 第一次写参考了PoPoQQQ大爷的代码。稍后补齐题解。。#include <queue>#include <cstdio>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)const int N = 100005, M = N * 2;using namespace st

2016-03-31 22:13:02 1054

原创 BZOJ 2822 AHOI 2012 树屋阶梯 卡特兰数 高精度

用N个矩形填充N阶楼梯的方案数。假设我们已知0..N−10..N-1阶的楼梯的方案数f(0..n−1)f(0..n-1)。 现在要推导到N。 我们枚举第N层的矩阵长度,有右端点必为右下顶点处,将1~N-1层分为2部分,即下方存在空位的部分(长度为i)与下方不存在空位(长度为N-i-1)(即被第N层矩阵填充)的部分。显然不会存在矩阵跨左右两个部分。 然后下方不存在空位的情况即为f(N−i−1)f

2016-03-30 21:31:46 1004

原创 BZOJ 1485 HNOI 2009 有趣的数列 卡特兰数 线性筛法分解质因数

普通筛法应该是O(nlnn)O(n\ln n)的? 线性筛法才能过了。#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)typedef long long ll;const int N = 2000001;ll qpow(ll a, ll b, ll p) { ll c = 1; for (; b; b /= 2, a

2016-03-30 15:21:46 809

原创 某基础的组合问题

城市A、B间有规整的N*M的方格网络,且A、B分别为网络的左下角和右上角,现有一车从A到B,且只能向右或向上移动,求有多少条可能的移动路径?答案对P取模。对于20%的数据,n,m≤5n,m\leq 5 对于50%的数据,n,m≤103n,m\leq 10^3 对于70%的数据,n,m≤106,p为质数n,m\leq 10^6,p为质数 对于100%的数据,n,m≤106,p≤109+7n,m\

2016-03-30 13:03:23 389

原创 数位DP

找个机会复习一下。。重新写一边题解。。HDU 2089#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;i++)int dp[16][10];void init() { int i, j, k; dp[0][0] = 1; FOR(i,1,14) FOR(j,0,9) { dp[i][j]=0;

2016-03-29 23:20:45 325

原创 BZOJ 1197 HNOI 2006 花仙子的魔法 数学推导

N维空间内用m个同大小的球能将空间最多分割成多少部分。orz http://vfleaking.blog.163.com/blog/static/174807634201321193348312/#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)long long f[16][101];int main() { int m, n,

2016-03-29 23:12:22 385

原创 POJ 1845 Sumdiv 简单数论问题

求aba^b的约数和。 a=∏ipkiia=\prod_i p_i^{k_i} ab=∏ipbkiia^b=\prod_i p_i^{bk_i} Sab=∏i∑j=0bkipji=∏ipbki+1i−1pi−1S_{a^b}=\prod_i \sum_{j=0}^{bk_i}p_i^j=\prod_i \frac{p_i^{bk_i+1}-1}{p_i-1}#include <cstdio>

2016-03-29 19:18:54 362

原创 BZOJ 3456 城市规划 NTT 生成函数计数 ***

求n个点的有标号简单连通图个数。令 f(n)f(n)表示有n个点的有标号简单连通图个数 g(n)g(n)表示有n个点的有标号简单图个数。所有可能的边一共有en=C2n=n(n−1)2e_n=C_n^2=\frac{n(n-1)}{2}种情况,即从n个点中选2个点连边。 所以简单无向图的个数,就是选边的种类数,即g(n)=C0en+C1en+⋯+Cenen=2eng(n)=C_{e_n}^0+C

2016-03-28 22:36:41 903

原创 BZOJ 3992 SDOI 2015 序列统计 NTT 生成函数 计数 原根

给定元素在[0,m)内的整数集合S,求有多少个长度为n的数列满足所有元素属于S且mod m下的积为x。由于m是质数,所以元素的积利用原根可转化为和。 即∏ei∈seqei≡xmodm\prod_{e_i\in seq} e_i \equiv x\mod m 由于原根的幂可以一一表示[0,m)内的数,所以 令hi,hx满足ghimodm=ei,ghxmodm=xh_i,h_x满足g^{h_i}

2016-03-27 22:17:40 963

原创 BZOJ 1856 SCOI 2010 字符串 卡特兰数

出入栈问题。。。 ans=(n+mn)−(n+mn+1)ans=\binom{n+m}{n}-\binom{n+m}{n+1} 于是直接算就好了。。没用分解因数的,于是150ms。。。#include <cstdio>#include <cstdlib>typedef long long ll;const ll mod = 20100403;ll quick_pow(ll a, ll b

2016-03-27 12:07:24 505

原创 BZOJ 1041 HAOI 2008 圆上的整点 数学推导

如果某整数xx代入圆方程得到的yy是整数就计入。 坐标轴上必有4个点,而且四象限对称,所以规定x,y≥1x,y\geq 1 ∵x2+y2=r2\because x^2+y^2=r^2 ∴y2=r2−x2\therefore y^2=r^2-x^2 ∴y2=(r−x)(r+x)\therefore y^2=(r-x)(r+x) ∴y=(r−x)(r+x)−−−−−−−−−−−√\theref

2016-03-27 11:28:57 495

原创 BZOJ 1997 HNOI 2010 Planar 2-SAT

已知图和其哈密尔顿回路,判断是否是平面图。平面图要求边不相交,而哈密尔顿回路是圈(废话),其他的边都可以看作是在圈上,那么问题就变成POJ 3207了。。。但是发现构出来的图是无向图所以并查集就好了 然而并查集比Tarjan慢,毕竟复杂度多了个logn\log nTarjan:#include <cstdio>#include <algorithm>#include <cstring>usi

2016-03-27 10:50:37 424

原创 BZOJ 1823 JSOI 2010 满汉全席 2-SAT

水题。。貌似和POJ某题很像,输入也很像。。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define ms(i) memset(i,0,sizeof i)#define rep(i,j,k) for(i=j;i<k;++i)const int N = 1005, M = 60000

2016-03-27 10:10:19 540

原创 POJ 2749|Building roads|2-SAT|二分答案

#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define rep(i,j,k) for(i=j;i<k;++i)#define ms(i) memset(i,0,sizeof(i))const int N = 20005, M = 600000;

2016-03-27 00:11:07 623

原创 POJ 3273 USACO 2007 Mar Monthly Expense 二分答案

长度为n的序列分成m块是每块数字之和的最大值最小。 二分答案。 如果按给定和的最大值依次分超过了m块,数字就小了。 否则数字就大了。 正确性怎么证都行。。#include <cstdio>int main() { static int d[100005]; int n, m, i, ma, s, l, r, mid, c; while (scanf("%d%d",

2016-03-26 23:49:45 681

原创 POJ 2296 Map Labeler 2-SAT 二分

有n个点,只能位于某个正方形的上或下边的中点上,所有正方形边长相等且不重叠,求最大边长。 二分答案。 如果某两个点的x坐标不小于边长就无所谓。 如果小于,就得考虑在上面下面的问题。 如果y坐标小于边长,那么就必须一个放上一个放下; 如果相等,一个上一个中,一个中一个下; 如果小于两倍边长,那么上、中上、中下、下。#include <cstdio>#include <cstring>#

2016-03-26 23:17:12 362

原创 BZOJ 4423 AMPPZ 2013 Bytehattan 平面图 并查集

强制在线。。 由于是平面图肯定有可以利用的性质的。 发现删边的影响是,该边相接的两个格子被打通了。如果要删除的边相接的两个格子是通的,由对偶图可知,相当于把图切成2半,该边两端点被分开。#include <cstdio>int id[1500][1500];int fa[2250002];int find(int x) { return fa[x] == x ? x : fa[x] = f

2016-03-26 22:48:40 859

原创 HDU 5651 xiaoxin juju needs help 组合数

由于错过了bc的registering只能在这里发发题解了。。给定一个字符串可自由打乱字母顺序,求能组成的回文串个数。 首先回文串对称的,所以只考虑一半就好了。 然后如果有多个字母出现奇数次那肯定答案为0。 再然只有一个有奇数次就拿一个放中间即可。 最后答案就是n2!pa!pb!⋯pz! \frac{\frac{n}{2}!}{p_a!p_b!\cdots p_z!} 其中pxp_x表示

2016-03-26 21:51:45 697

原创 POJ 3648 Wedding 2-SAT

一对夫妻不能对着坐,一些人不能对着坐,求可行方案。 显然夫妻可以算作一个状态,于是2-SAT。。#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define sqr(i) ((i)*(i))#define ms(i) memset(i,0,sizeof

2016-03-26 19:26:34 513

原创 HDU 4115 Eliminate the Conflict 2-SAT

Alice已知N轮剪刀石头布中Bob出的是什么。 同时Alice存在(a,b,c),c=0表示第a和b轮出拳相同,否则不同。 问Alice是否存在可行方案不输。因为必须不输,所以实际只有2种选择。。按冲突建图就好了#include <cstdio>#include <memory.h>#include <cmath>#include <algorithm>using namespace

2016-03-26 18:05:27 419

原创 HDU 1814 POI 2001 Peaceful Commission 2-SAT

正常的顺序跑一次2-SAT输出答案就好了。。#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define ms(i) memset(i,0,sizeof(i))const int N = 16005, M = 40005;struct TwoSAT {

2016-03-26 14:25:52 531

原创 POJ 3678 Katu Puzzle 2-SAT

和上一篇差不多,代码稍多#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;#define rep(i,j,k) for(i=j;i<k;++i)#define sqr(i) ((i)*(i))#define ms(i) memset(i,0,sizeof(

2016-03-25 23:14:24 474

原创 HDU 3715 Go Deeper 2-SAT 二分答案

if dep<m and x[a[dep]]+x[b[dep]]!=c[dep] then go(dep+1,n,m) 意思就是说,对于dep=0~m-1,有所有的不等式都成立。 而c[dep]只有3种取值取0时,x[a[dep]]和x[b[dep]]不同时为0取1时,x[a[dep]]和x[b[dep]]不为0和1或1和0取2时,x[a[dep]]和x[b[dep]]不同时为1于是2-

2016-03-25 22:56:46 573

原创 HDU 3622 Bomb Game 2-SAT 二分答案

一个游戏,Robbie每轮有2个格子可以选一个放置相同的炸弹,爆炸半径可控,但前提是炸弹爆炸范围(即圆)不能相交,求最大半径。似乎转化为判定性问题好做些。 二分爆炸范围。 如果两个格子欧几里得距离小于二倍的半径就不能同时选,连边即可。#include <cstdio>#include <memory.h>#include <cmath>#include <algorithm>using

2016-03-25 22:20:30 408

原创 POJ 3207|Ikki's Story IV - Panda's Trick|2-SAT

在圆上连m条边,可以在圆内或圆外,问是否存在可行方案使边不相交。讨论边之间的关系,为每条边建立2个节点,分别表示在圆内和圆外。显然通过边的端点易知是否必须两侧,如果是,那么添加限制,即分别连接两条边的圆内和圆外的表示点。如果存在某条边的两个点联通,那么就不存在可行方案。#include <cstdio>#include <algorithm>using namespace std;#defin

2016-03-25 18:37:12 463

原创 BZOJ 4001 TJOI 2015 概率论 卡特兰数 生成函数计数

求随机有根二叉树的叶节点数的期望。令fif_i表示有ii个节点的二叉树的个数,显然f0=1f_0=1,且有递归定义 fi=∑i=0i−1fifn−i−1 f_i=\sum_{i=0}^{i-1}f_if_{n-i-1} 令gk=∑ki=0fifk−ig_k=\sum_{i=0}^{k}f_if_{k-i} 那么数列gg的生成函数即G(x)=F2(x)G(x)=F^2(x) 又fi=gi−1

2016-03-24 23:35:56 2328

原创 POJ 1741|BZOJ 1468|Tree|树分治

求树上距离不超过K的点对数。 一条链有2种情况。 一是经过根;二是在子树中。 为了排除情况二,我们统计两端点不在同一子树中的。 可以先统计所有,再统计在同一子树中的。 于是可以对所有点距离排序,然后扫一遍统计即可。 http://blog.sina.com.cn/s/blog_6d5aa19a0100o73m.html#include <cstdio>#include <algorit

2016-03-23 22:55:03 634

原创 POJ 3696 The Luckiest Number 欧拉函数

是否存在n能整除的m使m各位都是8。m=89(10x−1)=kn m=\frac{8}{9}(10^x-1) = kn 8⋅10x−1gcd(8,n)=9⋅kngcd(8,n) 8\cdot\frac{10^x-1}{\gcd(8,n)} = 9\cdot\frac{kn}{\gcd(8,n)} 又gcd(8gcd(8,n),ngcd(8,n))=1 gcd\left(\frac{8}{gcd

2016-03-23 21:17:42 696

原创 POJ 1284 Primitive Roots 原根个数

模p下的原根个数为ϕ(p−1)\phi(p-1)#include <cstdio>int main() { int x, ans, i, y; while (scanf("%d", &x) == 1) { ans = 1; --x; y = x; for (i = 2; i * i <= y; ++i) if (x % i =

2016-03-23 18:59:28 568

原创 BZOJ 2194 快速傅里叶之二

b数组倒过来就是卷积了。#include <cstdio>#include <complex>#include <cmath>#define rep(i,j,k) for(i=j;i<k;++i)using namespace std;typedef complex<double> cd;const double PI = acos(-1.);const int N = 500010;

2016-03-23 17:56:12 500

原创 求逆元偷懒方法

既然标题为偷懒。。。 那么肯定不用一大堆神奇的定理啦如果令aa表示被逆元的数,a′a'为其逆元,有 a×a′≡1modQ a\times a'\equiv 1 \mod Q 令bb满足Q=ax+dQ=ax+d 假如我们一开始知道dd的逆元d′d',那么代换一下 d×d′≡1modQ d\times d'\equiv1 \mod Q (Q−a⌊Qa⌋)×d′≡1modQ (Q- a\l

2016-03-22 20:29:00 398 1

原创 CodeForces 438E The Child And Binary Tree NTT模板 生成函数应用

求有多少个二叉树使每个点权值均在给定集合C中而且权值和为令fsf_s表示总权值为s的合格二叉树个数。 于是有 f0=1fs=∑w∈C∑ifi×fs−w−i\begin{align}&f_0=1\\&f_s=\sum_{w\in C}\sum_i f_i\times f_{s-w-i}\end{align} 发现右边和卷积有点像。 于是令 gk=∑ifi×fk−i g_k=\sum_i

2016-03-22 14:20:04 1176

原创 BZOJ 3527 ZJOI 2014 力 FFT

数轴上有n个点电荷,求各电荷所在位置的电场强度。规定向左为正方向。(强行写题意)电场力表达式 Fj=∑i<jqiqj(i−j)2−∑i>jqiqj(i−j)2 F_j=\sum_{i<j} \frac{q_iq_j}{(i-j)^2}- \sum_{i>j} \frac{q_iq_j}{(i-j)^2} 电场强度表达式 Ej=Fjqi E_j=\frac{F_j}{q_i} 合并可得 E

2016-03-20 23:33:01 709

原创 HDU 1402 POJ 2389 BZOJ 2179 大整数乘法 FFT

FFT果然还是看算导来得快。。 网上的讲解糊里糊涂的 不过我还是看了2小时QAQ递归形式function recursive-fft(a) { n = a.length // 必为2的幂 if (n == 1) return a wn = Math.pow(Math.e, 2 * Math.PI * Math.i / n) // wn还可以利用复数

2016-03-20 17:37:00 964

原创 BZOJ 3876 AHOI 2014 支线剧情 有上下界的费用流

给定带费用DAG,求从点1出发,最优路径覆盖所有边。 于是有上下界的费用流。。 点1是源点,另外建汇点,使所有点连向汇点,边权无限大,费用0。 跑一次有上下界的费用流即可。下界边:S->j,容量1,费用t,i->T,容量为1下界入出差,费用为0; 原图边:i->j,容量无穷大,费用为t; 原图边:i->j, 变换为无源汇:建立汇点到源点1的边,容量无穷大,费用为0。 发现实际上源点1和

2016-03-19 13:55:42 593

原创 POJ 3694 Network 边双连通分量

给出一个无向图,问每次操作连接一条边后图还有多少割边。初步判断每次连边以后缩点,树边数就是答案。 不过由于割边会在Tarjan的搜索树上,因此加边就是不断地维护搜索树。当将两个点连起来时,两点到其LCA间的边都变成非割边,可以暴力维护。#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#de

2016-03-18 23:41:24 435

原创 POJ 2396 Budget 有上下界的可行流

求矩阵填数可行方案,给定每行每列和,和格子数字大小约束。 即: ∑jaij=ci; ∑jaji=ri; aij {>|<|=} dij \sum_j a_{ij}=c_i;\ \sum_j a_{ji}=r_i;\ a_{ij}\ \{>|<|=\}\ d_{ij} 对比一下有上下界的网络流线性规划表达: ∑vfsv=∑vfvt∑vfuv=∑vfvuluv≥fuv≥huv \sum_v f_{

2016-03-18 18:31:33 405

原创 POJ 2492 A Bug's Life 并查集

并查集操作的时候特别处理一下关系就好。#include <cstdio>#include <cstring>using namespace std;const int N = 5005;int fa[N], re[N];int find(int x) { int f = fa[x]; if (f == x) return x; fa[x] = find(f);

2016-03-16 23:55:52 485

原创 POJ 3687 Labeling Balls 拓扑排序

曾经是2012年AC的题。。 在POJ排到Rank 55是不是已经很好了。。#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#define FOR(i,j,k) for(i=j;i<=k;++i)using namespace std;const int N = 205, M = 40001;

2016-03-16 23:18:23 497

原创 POJ 3592 Instantaneous Transference 缩点 拓扑图DP

棋盘有些格子有权值,有些不可走,还有一些是传送门可以直接传送到给定点。剩余的均只能向右或向下走。求对角最长路。首先,如果传送门产生了环,那么连通分量内的所有点都是可达的——点可以重复走,所以缩点,新点的权就是原分量内的权和。 然后的DAG跑最长路的很简单了。#include <cstdio>#include <cstring>#include <algorithm>using namespa

2016-03-16 18:43:14 452

信息学竞赛离线评测软件

最受欢迎的信息学竞赛离线评测软件,需要提供输入输出文件,该软件将可以自动帮您运行程序(需要源代码),并输出得分。

2011-07-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除