自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lych的博客

nothing

  • 博客(35)
  • 收藏
  • 关注

原创 bzoj 4289: PA2012 Tax 最短路

QAQ手写堆好慢。。。       把一条边拆成两条,然后把边看成新的图中的点。然后考虑原图中的点x的入边和出边,显然每一条入边在原图中对应一条出边,在新图的这两个新点上连边为原图边权;然后由于一个点的点权为它出边和入边的较大值,考虑对x的出边排序后,相邻两条小的向大的连边权为原图边权差值,大的向小的连边权为0。       然后处理一下源点和汇点即可。。       不是很清楚SPF

2016-05-31 07:30:01 1464

原创 bzoj 4260: Codechef REBXOR Trie

sb题。。正的反的建Trie贪心走更新答案即可。      (整天sb题切切人生没希望了)。AC代码如下:#include#include#include#define N 400005using namespace std;int n,tot=1,a[N],f[N],g[N],bin[35],ch[13000005][2];int read(){ int x=0; c

2016-05-30 15:14:03 613

原创 bzoj 2658: [Zjoi2012]小蓝的好友(mrx) Treap

Treap神题。。。首先将问题转化为补集即求不含一个坏点的矩形个数。       考虑这道题目的暴力;显然我们枚举矩形的下边界,得到每一列可以向上拓展多少(视为高度),用单调队列可以求出对于列i向左向右拓展到多少然后就能求出该下边界的答案了。       注意到如果把向左能拓展到的看成是在dfs一颗树时入栈的序号,向右能拓展到的看成是在dfs时出栈的序号,那么显然这可以看成一棵树的dfs序

2016-05-30 14:15:56 1412

原创 bzoj 3112: [Zjoi2013]防守战线 单纯形

单纯形转对偶图。。       由于是全幺模,直接用int存就好了。       常数没有优化慢的飞起。。。AC代码如下:#include#include#includeusing namespace std;int n,m,a[1005][10005];void pvt(int x,int y){ int i,j; for (i=0; i<=n; i++) if

2016-05-27 19:17:46 1057

原创 bzoj 3559: [Ctsc2014]图的分割 并查集

看到就猜是把边权从小到大排序然后插件去。。然而事实上排序后某条边必须插就插这条边是对的!       考虑一条边(x,y,z),x所在集合为u,y所在集合为v,其中u!=v;那么如果z       显然这样也是完美的,因为对于一个集合u,如果可以分类为p和q,那么连接p和q之间的边是不会连的,这样就矛盾了。因此必然完美。AC代码如下:#include#include#inclu

2016-05-27 13:49:15 834

原创 bzoj 4555:[Tjoi2016&Heoi2016]求和 多项式求逆

如果没有2^j和j!,那么题目就是求Σ(i=0,n)Bi(Bi表示第i个贝尔数),而Bi=Σ(j=0,i)S(i,j)。       考虑第二类斯特林数的含义为将i个不同的数分成j个集合的方案数,那么*j!就是讲i个不同的数分到j个有序集合的方案数,那么令Fi=Σ(j=0,i)S(i,j)*j!,则Fi表示将i个不同的数分到任意多个有序集合的方案数。考虑Fi的递推式,枚举最后一个集合的大小k,

2016-05-27 07:58:54 2969

原创 bzoj 3555: [Ctsc2014]企鹅QQ hash

哈哈20s卡过~\(≧▽≦)/~       不过用的是双hash。。。跑得慢也正常。。       sb题。直接枚举不同的哪一位其余的hash判断是否相同即可。具体可以快排或者用哈希表来统计答案。AC代码如下:#include#include#include#define mod1 1000000009#define mod2 900000083#define ll l

2016-05-26 15:11:50 627

原创 bzoj 3152: [Ctsc2013]组合子逻辑 贪心&优先队列

令k表示当前还能拓展多少位;如果不能拓展的话,就从当前所有的数中选最大的并删除,那么这个最大的数-1就是还能拓展的位数,同时答案+1。       注意一下细节就好了。AC代码如下:#include#include#include#include#includeusing namespace std;int n,a[2000005]; priority_queue q;

2016-05-26 13:51:55 1416

原创 bzoj 3151: [Ctsc2013]因式分解 数学

假设分解为∏(pix+qi),那么就有∏pi=An,∏qi=A0。由于有pi       至于于是判断,可以考虑在模意义下判断,选70个大质数分别判断即可。。。       剩下的就是码码吗了。。AC代码如下:#include#include#include#include#define ll long longusing namespace std;cons

2016-05-26 10:41:22 1178

原创 bzoj 3148: [Ctsc2013]没头脑和不高兴 数学&线段树

考虑两个纸牌i和j满足ia[j]则对答案有贡献为1;分四种情况讨论:       1.i和j都没被排序,期望贡献1/2;2.i和j都被排序,期望贡献0;       3.只有i被排序,假设被排序的有t个数,那么在期望情况下这t个数是均匀分布的,则a[j]比a[i]小的概率为Pi/(t+1),Pi表示i在t个数中是第几个;       4.同理只有j被排序时期望为(t-Pi+1)/(t+

2016-05-25 18:30:01 1279

原创 bzoj 3149: [Ctsc2013]复原 dfs

虽然表算是神奇的分组但是只要搜搜搜就过去了。。。       每个连通块分别考虑,然后枚举这一条弦的两个端点;如果一个端点已经确定,那么另一个端点的范围必然是一个区间,用位运算加速即可。然后就过了。。。       最大独立集的话子集dp一下就好了。。AC代码如下:#include#include#include#define N 25#define M 1300005u

2016-05-25 08:44:04 1103

原创 bzoj 4314: 倍数?倍数! 数学

我们可以把集合改成序列,然后答案再/K!,这样就简单很多了。注意此时1,2,2算两次。       实际上,考虑前K-1个数,我们随意取,这样最后一个数实际上是固定的;但是可能会出现重复的情况,那么此时我们统计最后两个数重复,也就是前K-2个数随意取,且满足前K-2个数的和S使得S+2x≡0(mod N)有解的方案。注意到该方程有解当且仅当S≡0(mod gcd(2,N)),那么对于特定的

2016-05-24 16:55:09 1281

原创 bzoj 3328: PYXFIB 数论&矩阵乘法

AC代码如下:#include#include#include#define ll long longusing namespace std;ll n; int m,mod,cnt,yz[100005];struct matrix{ int p[2][2]; }a;matrix operator *(const matrix &x,const matrix &y){ matr

2016-05-24 12:59:45 1212

原创 bzoj 3150: [Ctsc2013]猴子 高斯消元

范围N       显然我们可以令f[S]表示手上牌集合为S时的胜率,然后高斯消元或者多次迭代出解。       然后打表发现若A∩B=∅,则f[A∪B]=f[A]+f[B],如果这个成立,那我们就可以令f[i]表示手上牌为i的胜率然后高斯消元辣~\(≧▽≦)/~。       考虑另一个游戏:三个人a,b,c,手上的牌为A,B,C,然后任意选两张牌如果不在同一个人手中就和这道题目一样

2016-05-24 08:46:33 1209 1

原创 bzoj 3243: [Noi2013]向量内积 矩阵乘法

这道题目中D应该是       我们可以把两个向量的点积看成1*d和d*1的矩阵相乘;那么我们将原始矩阵A转置得到A',A*A'[i,j]就是向量i*向量j的点积。       但是这样是O(N^2D)的;考虑用一些黑科技。考虑mod=2时,假设对于i,我们求出i之前的所有向量与i的点积的和;如果所有的点积都>0即=1,那么显然点积的和对二取模=(i-1)%2;否则如果≠(i-1)%2,显

2016-05-23 21:00:29 2760 1

原创 bzoj 4558: [JLoi2016]方 数学&计数

首先通过容斥转化为求:所有正方形-至少有1个坏点的正方形+至少有2个的-至少有3个的+有4个的。       所有正方形:显然一个正方形不管是斜的还是正的,它所占的网格中的空间一定是一个正的正方形,不妨称为该正方形的框架。于是我们可以枚举这个正方形的框架的边长,然后枚举偏离多少格即可。       至少有1个坏点:我们枚举坏点,然后同样枚举包含这个坏点的正方形的框架,那么这个坏点在框架上的

2016-05-23 13:01:34 1849

原创 bzoj 2805: [Ctsc2012]Circuit 物理

物理太差被虐了/(ㄒoㄒ)/~~        首先将电阻看成1欧不影响答案吧。。        考虑将一个点x的电势Ux,它父亲y的电势Uy,考虑将Ux用aUy+b的形式来表示,这样就可以利用树高为50的条件O(H)查询修改了。        对于任意一对点(x,y),考虑y->x的电流为(Uy-Ux+E)/R,忽略单位的话在数值上可以看成Uy-Ux+E。其中E为y->x的路上的

2016-05-23 10:46:48 957

原创 bzoj 4589: Hard Nim 异或规则下的多项式乘法

定义(a$b)i = Σaj * bi^j ,那么题目相当于求A^N的第0项,其中Ai=[i为质数且i       显然我们可以用快速幂+分治乘做到N^1.59logN,光荣TLE。       和普通多项式乘法一样,我们寻找一种变换trans(a),使得trans(a$b)=trans(a)*trans(b),这里有(X*Y)i=Xi*Yi。只要能O(NlogN)转化和复原就能解决这个问

2016-05-17 16:19:05 2287 4

原创 bzoj 3214: [Zjoi2013]丽洁体 贪心&动态规划

显然两端的字符串要贪心找对吧,中间的那一段考虑类似于dp的方法。显然中间的需要找到最小的r-l,满足[l,r]中包含了给定的第二个串,然后我们中间的一位一位枚举,得到f[i]表示给定第二个串的前i位都满足的当前在中间段的最右处,然后令g[i]表示前i位满足且第i位最右的答案,然后用g[len S2]更新答案。AC代码如下:#include#include#include#define

2016-05-17 07:59:20 1903

原创 bzoj 3571: [Hnoi2014]画框 最优乘积匹配

显然可以把一种匹配看成点(x,y),x为第一种边权的和,y为第二种边权的和。那么这个匹配的值为x*y,题中要寻找最小的x*y。       令k=x*y,那么对于匹配(x,y),在直线y=k/x上方的匹配都是没有它更优的;求最优乘积匹配的方法同最小乘积生成树。首先找到x最小的匹配(x1,y1)和y最小的匹配(x2,y2)作为初始的边界。令(x1,y1)为左边界,(x2,y2)为右边界的解为so

2016-05-16 19:17:06 945

原创 bzoj 3111: [Zjoi2013]蚂蚁寻路 动态规划

首先枚举下边界,然后令f[k][x][y]表示已经左转k次,当前在x,y的最优值,转移可以优化到O(1)。因此为O(N^3K)。AC代码如下:#include#include#include#define inf 1000000000#define N 105using namespace std;int m,n,cnt,a[N][N],b[N][N],f[N][N],g[N

2016-05-16 18:01:20 1688

原创 bzoj 3820: 虫逢 hash

假设我们按照某一种随机的规则在两个同源变形虫中取一个数,那么由于有l/2是相同的,因此概率为1/4。如果我们给每一个基因定一个值,然后定义一个变形虫的值就是它l个基因中的最小值,那么两个同源变形虫相同的概率就是1/3;两个不同源为1/l。如果取两个,就分别是1/9和1/l^2=1/n。       那么每次给每个基因随机定值,这样一次可以得到n/9对,不断操作即可。AC代码如下:#in

2016-05-13 13:26:56 986

原创 bzoj 2125: 最短路 树链剖分

好吧实际上和树剖没什么关系。。只是用来求lca的。。。       对于点x,如果不在环中,定义它的父亲为dfs树;否则定义它的父亲为它所在环在dfs树中最高的点,同时距离为它到那个最高点的最短路。然后可以用树剖求出(x,y)的lca。然后分类讨论一下,因为如果x->lca和y->lca的路径上最后一部分在一个环中,那么可能可以有另一种走法。AC代码如下:#include#inclu

2016-05-12 21:03:01 1337

原创 bzoj 2124: 等差子序列 树状数组&hash

这道题太神了根本想不到QAQ。       题目就是求是否存在i       我们不妨枚举中间那个数为x,然后按照输入的顺序对x进行操作。如果x满足条件,也就是存在两个数y和z,x-y=z-x,并且y已经出现过了而z还没有出现,那么我们就可以直接输出'Y'了。       因此,我们构造一个辅助数组b,其中x如果出现过,那么b[x]=1;否则b[x]=0。因此如果x满足条件,那么必然存

2016-05-12 19:01:57 2003

原创 poi2012 切题记

19th Polish Olympiad in InformaticsTasksFestival(Stage I)(100/100)Letters(Stage I)(100/100)Distance(Stage I)(100/100)Rendezvous(Stage I)(100/100)Wel

2016-05-12 15:33:14 1197

原创 bzoj 3822: 文学 动态规划

题目等价于平面上一些点,然后给定某些半平面,选某一个半平面有代价,求最小的代价使得选出的半平面的并包含所有给定的点。       同样,也等价于另一些半平面,其中每个半平面都和题中给出的互补,然后求最小的代价使选出的半平面的交不包含任意一个点。       特判一个半平面包含所有点的情况;那么剩下的就是求一个凸包不包含任何点,N^2枚举凸包上的一个点作为基点,然后令dp[i]为基点到i不包

2016-05-12 14:38:34 1403

原创 bzoj 3811: 玛里苟斯 高斯消元&dfs

这道题目还要根据k来分类讨论。。。。       当k=1的时候,按位求贡献,然后发现答案就是所有数or起来再/2。       当k=2的时候,就真的要按位来了。。按照(x1+x2+...+xn)^2展开x1x1+x1x2+x1x3...+xnxn,枚举i,j表示后面式子的下标。然后一个数就变成(0/1,0/1)二元组,当选出的数二元组异或后为(1,1)的时候有2^(i+j)的贡献。显然

2016-05-09 18:17:22 2087

原创 bzoj 3817: Sum 类欧几里得算法

这道题目solution写了两种做法,都讲一下吧。       首先,令x=r^0.5,显然,如果x>2,则可以不断减2到小于二;如果x>1,那么变为2-x。因此此时必有x       题目等价于在数轴从0~n,以y长度为一个区间(左闭右开)黑白交替染色,求黑色部分覆盖的整点减去白色部分覆盖的整点。然后把最后面零散的部分暴力计算,如果最后一个是黑色的也暴力计算。那么这个时候黑白段数相等,且

2016-05-08 14:24:22 3671

原创 bzoj 3244: [Noi2013]树的计数 递推

这道题目bzoj上面真是丧心病狂,非要输出三个数(ans-0.001,ans,ans+0.001),mdzz。害的我还去抄了一发标程       首先按照bfs的顺序重新标号(比如样例那样),然后对于点x,令pos[x]为x的dfs序编号,a[i]为dfs序的第i个。       考虑每个点的贡献,如果pos[x]>pos[x+1],那么如果x和x+1同一层,显然pos[x]

2016-05-06 12:23:27 2036 1

原创 bzoj 3242: [Noi2013]快餐店 dfs&递推

显然题中的图就是一个环基树。另外对于最优点,必然存在两个点与该点距离相等且都是最远点,考虑这两个点与最优点所构成的链。       1.如果这条链在环外面的树上,那么显然一定是树的直径(另一方面,对于任意环外面的树上的直径,答案必然>直径的一半);       2.如果这条链一部分在环上,那么必然存在换上的两个点x,y,这条链由:x对应树中x的最长链,环上x->y最短路,y对应树中y的最长

2016-05-05 20:45:53 3053 4

原创 bzoj 3672: [Noi2014]购票 树上cdq分治

显然易得dp方程:f[x]=min{f[y]+(d[x]-d[y])*px+qx},其中y是x的祖先且d[x]-d[y]       然后就可以得到对于一定定点z(就是z在等式左边),两个点x,y(d[x]>d[y])且y更优的条件为:(f[x]-f[y])/(d[x]-d[y])>=pz,那么令不等式左边那个为S(x,y)即(x,y)的斜率。       考虑一条链的情况,显然可以离线后

2016-05-04 20:30:37 1083

原创 bzoj 4197: [Noi2015]寿司晚宴 状压dp

这题其实N出到800都没问题吧。。       显然,如果两个数有一个质因数相同则不能在两边;更进一步,按照最大质因数,可以把1~N的所有的数分组,那么统一组的不能在两边。显然次小质因数必然       实际上这样是O(N*4^8),但是注意到最终只有i&j=0的才有用。因此有用的状态只有3^8种,因此就是O(N*3^8)。AC代码如下:#include#include#inc

2016-05-03 21:43:58 564

原创 bzoj 4574: [Zjoi2016]线段树 动态规划

题意就是求每个数在所有方案中的最终值的和。显然一个数经过若干次变化一定会变成另外一个数,那么离散化后,令g[i][j]表示i这个数最终变成从小到大第j个的方案数。一个直观的思路是,我们枚举j,那么显然g[i][j]>0的i的范围是(l,r),其中a[l]和a[r]是第j大的数两侧分别第一个大于这个从小到大第j个数的数(由于是随机因此可以假定没有两个数相同)。此时,       如果令f[k][

2016-05-03 17:18:55 2369

原创 bzoj 4011: [HNOI2015]落忆枫音 递推

计数dp(递推)裸题(跟zj的题真心不能比啊)。。。       假设没有那个加边。那么显然答案就是所有点的入度相乘的结果(不包括1),显然每个点都可以随意选择一个入边,那么由于原图是DAG,因此选完n-1条边之后一定连通且无环,因此必然合法。       一开始斯波看错题以为是随意加一条边然后统计总方案数       那么加入S->T这条边之后,不妨仍然按照上述方法直接求答案;然后考

2016-05-02 22:11:42 606

原创 bzoj 4025: 二分图 lct

显然一个图是二分图当且仅当图中不存在一个奇环。那么我们用lct维护一个树形结构,如果不存在一条非树边,它连接的两个点在树上的距离为偶数,那么就是一个二分图。那么我们按时间离线之后维护一个树形结构和一个边的集合,集合中的边连接的两点在树上的距离为偶数。那么这个集合为空集则为二分图。       那么如果出现奇环,留下拿一条边在树上就成了问题。显然消失时间晚的可以存在的更久,因此维护一个消失时间的

2016-05-02 20:16:28 794

空空如也

空空如也

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

TA关注的人

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