该文被密码保护。
posted @ 2018-08-19 22:44 lokiii 阅读(1) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-17 20:34 lokiii 阅读(1) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-15 22:36 lokiii 阅读(1) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-15 20:40 lokiii 阅读(2) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-12 22:16 lokiii 阅读(1) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-10 22:32 lokiii 阅读(2) 评论(0) 编辑
该文被密码保护。
posted @ 2018-08-08 15:52 lokiii 阅读(1) 评论(0) 编辑
摘要: 爆搜卡线过 并不知道正解是啥 cpp include include using namespace std; const int N=40; int n,ans,a[N][N],l[N],h[N],c[N]; void dfs(int x) { if(x==n+1) { ans++; return阅读全文
posted @ 2018-08-05 22:09 lokiii 阅读(7) 评论(0) 编辑
摘要: 网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数 最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 cpp include include using namespace std; const int N=205,dx[]={2,2, 2, 2, 阅读全文
posted @ 2018-08-05 21:55 lokiii 阅读(3) 评论(0) 编辑
摘要: 设n m,答案是\\( C_n^m \\),然后高精就行了 具体做法是先把指数筛出来,然后对每个数因数分解,记录质因子个数,最后被除数减去除数质因子个数,把剩下的质因子乘起来就行了阅读全文
posted @ 2018-08-05 21:02 lokiii 阅读(6) 评论(0) 编辑
摘要: 同1801 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了阅读全文
posted @ 2018-08-05 20:17 lokiii 阅读(8) 评论(0) 编辑
摘要: 设s为前缀和,首先显然的条件是$$ s_{bi} s_{ai 1} =c $$,然后隐含的是$$ s_i s_{i 1} =0 s_i s_{i 1} include include using namespace std; const int N=500005,inf=1e9; int n,s=i阅读全文
posted @ 2018-08-05 19:48 lokiii 阅读(1) 评论(0) 编辑
摘要: 感觉我的智商可能不够写题解,就直接截了hzwer的blog 地址http://hzwer.com/2656.html cpp include include include using namespace std; const int N=1000005; int n,a[N],c[N],p; lo阅读全文
posted @ 2018-08-04 14:25 lokiii 阅读(2) 评论(0) 编辑
摘要: 两遍dfs一遍向下,一边向上,分别记录子树内人数a,当前点到所有点的距离b,最大值c和次大值d,最大值子树p 然后答案是2b c cpp include include using namespace std; const int N=1000005; int n,m,h[N],cnt,p[N]; 阅读全文
posted @ 2018-08-04 10:58 lokiii 阅读(3) 评论(0) 编辑
摘要: 先从后到前做一个最长下降子序列的dp,记录f[i],我这里用的是二分(其实树状数组比较显然) 然后对于询问,超出最长上升子序列的直接输出;否则从前到后扫,f[i] =x&&a[i] la(上个选的)就选,因为这时第一个出现的一定是符合条件的中最小的最小的阅读全文
posted @ 2018-08-03 22:47 lokiii 阅读(4) 评论(0) 编辑
摘要: ~~没有复杂结构甚至不长但是写起来就很想死的代码类型~~ 原理非常简单,就是用先用单调队列处理出mn1[i][j]表示i行的j到j+k 1列的最小值,mx1[i][j]表示i行的j到j+k 1列的最大值 然后就变成求单列最大最小值,用上面同样的方法处理出对于列的mn2mx2即可 cpp includ阅读全文
posted @ 2018-08-02 23:29 lokiii 阅读(5) 评论(0) 编辑
摘要: 设f[i][j]表示数列到i为止最后一项第j位为1的最大子序列长度,每次从i 1中1 include using namespace std; int n,f[35],ans; int read() { int r=0,f=1; char p=getchar(); while(p '9'||p='0阅读全文
posted @ 2018-08-02 22:10 lokiii 阅读(3) 评论(0) 编辑
摘要: 第一想法是按照结束时间贪心,但是这样有反例 所以先按照t贪心,能选则选,把选的楼的持续时间放进大根堆里,当当前的楼不能选的时候如果当前的持续时间比大根堆里最大的要小,就用这个替换最大,这样总数不变但是时间缩短了 cpp include include include include using na阅读全文
posted @ 2018-08-02 18:38 lokiii 阅读(1) 评论(0) 编辑
摘要: ~~为什么早年的题总是从0开始标号啊……又zz了一次WA~~ 分层图的题只有这一个套路吧,建分层图,然后优化时间是分层跑spfa然后层与层之间单独跑即可 cpp include include include include using namespace std; const int N=5000阅读全文
posted @ 2018-08-01 23:44 lokiii 阅读(6) 评论(0) 编辑
摘要: 又犯了zz的错误…… 需要注意的是,被毁掉的星球是不算一个联通块的(可能只有我这么算吧= =) 离线下来时间倒流,就变成了向图里加星球,也就是用并查集维护联通,在用tot变量记录当前答案,每加一个星球就tot++,每合并一个联通块就tot 注意始终没有被毁掉的星球应该在时间倒流前就加进图里阅读全文
posted @ 2018-08-01 23:34 lokiii 阅读(2) 评论(0) 编辑