摘要:
#include<bits/stdc++.h> using namespace std; const int N=20010,K=110;; int n,k; int f[K][N]; struct data{ int d,c,s,w; data(int d=0):d(d) }a[N]; bool 阅读全文
摘要:
namespace IO { define gc() (iS==iT?(iT=(iS=ibuff)+fread(ibuff,1,SIZ,stdin),(iS==iT?EOF: iS++)): iS++) const int SIZ = 1 inline void read(Type &x) { x= 阅读全文
摘要:
splay 阅读全文
摘要:
```cpp include define inf 2147483647 using namespace std; const int N=100010; int ch[N][2],val[N],key[N],sz[N],tot; struct FHQtreap{ int rt,x,y,z; inl 阅读全文
摘要:
```cpp #include using namespace std; const int N=100010; int root,tot; int sz[N],val[N],ch[N][2],fa[N]; void pushup(int x){ if(!x)return; sz[x]=1; if(ch[x][0])sz[x]+=sz[ch[x][0]],fa[ch[x][0]]=x;... 阅读全文
摘要:
区间DP 设$f[i][j]$为从$i$到$j$这段区间被修正为回文串的最小花费,$c[ch][0]$为添加字符$ch$的花费,$c[ch][1]$为删去字符$ch$的花费,$s$为题目给出的串。为可以用如下几个转移: 用$[i+1,j]$区间转移:这种转移相当于在$[i+1,j]$区间的左边加入一 阅读全文
摘要:
矩阵乘法(快速幂) 为说明方便,这里让$k$为点数,$n$为路径长度。 先将点都离散化,这样最后的点只有$2k$个。 先考虑一种暴力,每次用$O(k^3)$的复杂度来暴力更新,设当前长度$l$点的两两最短路矩阵为$S$,现在要转移到$l+1$时的最短路矩阵$T$。我们考虑用每条边更新,对于某条从$x 阅读全文
摘要:
~~现在居然出现一道题只有$pascal$题解没有$C++$题解的情况,小蒟蒻要打破它。~~ 思维题:分类讨论 回归正题,此题十分考验思维,首先我们要考虑如何把不会走的地方给填上,使最后只用求一遍这个图的周长即可。考虑目标点的几种情况: $0.$当前点周围有三个$A$或四个$A$时:这个点肯定不会走 阅读全文
摘要:
组合数学 对每个数,先分类讨论,将答案分为这个数有翻倍和这个数没翻倍。 在讨论前,我们规定:$low(x)$为小于等于这个数的数的个数,当前数为$x$。 subtask1 如果这个数没翻倍:我们考虑哪些数翻倍不会影响这个数的排名,一种是翻倍后依然 小于 $x$的,一种是本来就 大于等于 $x$的。 阅读全文
摘要:
暴搜 非常暴力的搜索,以至于我都不相信我能过。 方法是:暴力枚举所有牌型,然后暴力判断是否可行。 暴力枚举部分: 非常暴力: 然后再用贪心的方式判断最后的散牌是否可以。 枚举有多少的三张牌要带一个,然后得到有多少的一张牌和多少的两张牌可以被带掉。 对于九条可怜的牌,去掉最大的牌。对于xx网友的牌,去 阅读全文