- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 C++蜂鸣器歌曲2
写作业无聊来玩一发,旋律也不知道是自创的还是哪里听来的,侵删,这次有休止符了233#include <cstdio>#include <windows.h>#include<conio.h>#define qdo 262 #define qre 294#define qmi 330#define qfa 349#define qso 392#define qla...
2018-02-28 19:54:20 1117
原创 51Nod1395 两个回文
题目看这里复习一下PAM做两次回文自动机,一次正串,用f[i]表示以i结尾的串最长的回文子串反过来做一次记为g[i]那么ans=max(f[i]+g[n-i])#include<stdio.h>#include<string.h>#include<algorithm>#define N 100010using namespace std;char S[...
2018-02-27 22:06:51 293
原创 51Nod1295 XOR key
题目看这里经典的区间xor最大值问题很久以前就知道做法所以来写一写,可持久化trie意外地发现好写而且跑得很快#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#include#define N 50010using namespace std;int c[N*40],s[N*4
2018-02-27 21:56:26 341
原创 友情链接
由于皮肤显示问题,现在将所有友情链接转至此文章Jz神犇 wwt的博客wyx的博客fch的博客dxw的博客cty的博客czy的博客gjx的博客xdl的博客wzd的博客zjy的博客ljj的博客zlt的博客hhh的博客zz的博客lyd的博客ch的博客hzj的博客dh的博客lh的博客xhm的博客lyz的博客hjy的博客ddx的博客 EZ神犇 zjt的博
2018-02-27 21:43:41 292
原创 51Nod1601 完全图的最小生成树计数
题目看这里这个题好像在哪里做过。。。但是翻不到基本思想:在最高位不同的两个集合里只能有一条边相连我们可以用trie来做,每次到一个节点,就在他的两个儿子里找xor值最小的加到答案里若有超过2个权值相同的点时,计算方案的方法为x^(x-2),这个是完全图的生成树个数公式无压力·真rank1#include#include#include#define N 10001
2018-02-22 22:29:28 512
原创 51Nod1442 士兵的旅行
题目看这里一看这种分配式的题目马上联想到网络流顺手一个SAP板子直接0ms上rank1拆点建图x,y1.s->x[i]边权a[i]2.y[i]->t边权b[i]3.对于原图每条边p->q,x[p]->y[q]边权∞4.x[i]->y[i]边权∞#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#inclu
2018-02-22 22:07:25 210
原创 51Nod1528 加号分配
题目看这里考虑单独计算每个位置的贡献一个位置i的贡献为c[i]*10^k当且仅当它后面连续(k-1)个数前都没有加号那么也就是确定了k个位置的情况,剩下的位置未知,用组合数计算即可注意到当k相同时很多位置的系数是一样的,可以前缀和降低复杂度至O(n)#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include
2018-02-22 21:59:04 279
原创 51Nod1679 连通率
题目看这里一个简单的计数问题我们先考虑O(n^2)的做法对每个点dfs一次,求出d[i]表示i的深度,那么对答案贡献就是Σ2^(n-d[i])那么我们考虑用数据结构动态维护这个d[i],显然可以用线段树来维护dfs序做到复杂度O(n lg n) 效率很高rank8看了下solution突然才发现别人都不是这么做的!不管了反正跑得过而且跑的快。。就是代
2018-02-22 21:51:15 256
原创 51Nod1426 沙拉酱括号
题目看这里我们考虑怎样得到最大答案首先对原序列进行括号配对,没有配对上的那些可以直接扔掉不影响答案让后我们有一个合法的括号序列当一对括号与区间有相交但是不包含整个区间时,将会产生一个位置的浪费(在区间内的那个左括号或者右括号没法配对了),所以答案-1那么一个区间的答案[l,r]应该是r-l+1-与这个区间相交的括号对数+包含这个区间的括号对数(会被减重)求相交的个数可以前缀
2018-02-22 21:41:02 229
原创 51Nod1678 lky与gcd
题目看这里本来以为是一个离线做的题目结果发现数据小可乱搞预处理f[i]表示Σa[ki],预处理每个i的因子集合s[i]每次修改位置i,即为将所有的f[s[i]]都修改每次求和,答案为Σmu[i]*f[i] mu为莫比乌斯函数复杂度O(n√n)#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#includ
2018-02-22 21:28:52 252
原创 51Nod1556 计算
题目看这里一个公式题,推不出来我们令f[i]表示当n=i时的总方案数,令g[i]表示n=i时,结尾恰为1的方案数那么显然,f[i]=3f[i-1]-g[i]只需要考虑计算g[i],这个东西是一个叫做默慈金数的东西递推式为g[n+1]=g[n]+Σg[i]*g[n-i-1]=((2n+3)*g[n]+3n*g[n-1])/(n+3)直接计算即可#pragma GCC
2018-02-22 21:21:28 268
原创 51Nod 1052/1053/1115 最大M子段和V1/V2/V3
V1N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。N,M例如:-2 11 -4 13 -5 6 -2,分为2段,11 -4 13一段,6一段,和为26。V2N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数
2018-02-21 00:06:37 392
原创 51Nod1207 内存管理
题目看这里这么好玩的数据结构题肯定是要来做一做啦考虑splay-显然用一个节点去维护一个连续的内存块,每次申请内存就找一块尽可能前的,释放就找一个有相交的并合并,没有则新建节点splay一打还是错落百出,不过效率还是可以的,跑了第一和map一样快#include<stdio.h>#include<string.h>#include<algorithm>#d...
2018-02-19 10:17:54 301
原创 51Nod1444 破坏道路
题目看这里也是非常套路的一道题首先考虑,如果只有一组限制,那么答案就是m-l1现在考虑加了一组限制的情况下有什么影响显然,被两段路径重复覆盖的那一部分会多减掉一次那么我们可以枚举这段路径,让后用dp来计算答案,注意因为是无权图可以bfs O(n^2)求出两点之间最短路#pragma GCC opitmize("O3")#pragma G++ opitmize("O3"
2018-02-15 10:16:10 333
原创 51Nod1349 最大值
题目看这里 各种离线套路题。。。我们考虑对每个元素都先预处理答案让后就可以O(lg n)回答了将元素排序后,对于两个询问i,j∈(s[k],s[k+1]]的答案是一样的,我们考虑计算当i=s[k]时的答案显然,当i=s[1]的时候,答案就是总区间数这时考虑当i->s[2]的时候有哪些区间被从答案中去掉了对于一个点i,令l[i]表示当前询问q下,满足区间[l[i],i]最大值
2018-02-15 09:41:21 305
原创 51nod1485 字母排序
题目看这里也是非常简单的线段树合并模板题了,虽然实际上最好的做法因该是开数组合并(这样是均摊O(1)的)不过还算跑的快,第四#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include#include#define mid (l+r>>1)#define N 100010using names
2018-02-15 09:26:28 222
原创 51Nod1469 淋漓尽致子串
首先,我们来定义一下淋漓尽致子串。1.令原串为S。2.设子串的长度为len,在原串S中出现的次数为k,令其出现的位置为p1, p2, ....pk(即这个子串在原串中[pi,pi + len - 1]中出现)。3.若k=1,则该子串不是淋漓尽致子串。4.若存在pi,pj(i != j),使得S[pi - 1] = S[pj - 1],则该子串不是淋漓尽致子串。5.若存在pi
2018-02-07 09:27:26 275
E文本加密器
2018-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人