ICode9

精准搜索请尝试: 精确搜索
  • BZOJ 4310 跳蚤2020-01-30 15:51:42

    BZOJ 4310 跳蚤 不太会做,看了题解才会的。 首先要二分子串。后缀排序后,本质不同子串个数其实就是 $ \sum_i n + 1 - sa[i] - height[i] $ ,考虑排序后的后缀,本质不同的子串个数其实就是本质不同这些后缀的前缀个数。一个后缀的贡献就是这个后缀的所有前缀,减去自己和上一个后缀的 LC

  • BZOJ 4305 数列的GCD2020-01-29 23:52:08

    题目链接:Click here Solution: 设\(f[i]\)表示当\(d=i\)时的答案,\(c[i]\)表示\(a\)序列中有多少个\(i\)的倍数 首先我们要使恰好\(k\)个数互不相同,则表示其他\(n-k\)个数恰好相同,那么有\({c[i]\choose n-k}\)种方案 考虑剩下的\(c[i]-n+k\)个位\(i\)的倍数的位置,\([1,m]\)中\(i\)

  • BZOJ 2159: Crash 的文明世界2020-01-29 16:58:38

    记得去年暑假集训的时候本来想了一个动态点分的做法的,然后写道一半因为某些不知名原因就没写了,然后就一直放着,然后发现斯特林反演真NM好写 首先考虑用关于幂的斯特林反演: \[m^n=\sum_{i=0}^m \left\{ ^n_i\right\}\times i!\times C_m^i\] 套上去就是: \[ans(x)=\sum_{i=1}^n dis(i

  • BZOJ - 36872020-01-29 11:09:04

    Description 小呆开始研究集合论了,他提出了关于一个数集四个问题: 1.子集的异或和的算术和。 2.子集的异或和的异或和。 3.子集的算术和的算术和。 4.子集的算术和的异或和。 目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把 这个问题交给你,未来的集训队

  • BZOJ 3210: 花神的浇花集会2020-01-29 09:58:04

    BZOJ 3210: 花神的浇花集会 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多题,每道题都有两个参考系数:代码难度和算法难度 花神为了准备浇花集会的题,必须找一道尽量适合所有人的题 现在花神知道每个人的代码能

  • BZOJ 1396 识别子串2020-01-28 20:56:04

    BZOJ 1396 识别子串 昨晚拿到这道题想到了线段树做法还以为麻烦了,码了好久过了才发现网上都这么写的。。 只出现一次实际上就是 endpos 集合大小为1,就是 parent 树上siz是1。 由于我们只需要 endpos 集合大小是1的点的 endpos 集合,也没必要线段树合并求 endpos 集合了,对每个点加进

  • BZOJ 1413. [ZJOI2009]取石子游戏2020-01-27 23:01:58

      用dp来解决博弈问题这是第一次做,之前遇到一个博弈dp的题还没补。。设 $L_{i,j},R_{i,j}$ 分别表示在区间 $[i,j]$ 左右放上多少石子能让先手必败。首先这个 $L,R$ 肯定是唯一的,假设不唯一,即存在 $L_1,L_2$ 加在当前区间左端能使先手必败,设 $L_1>L_2$,那么先手把 $L_1$ 取得和 $L

  • BZOJ 4883 [Lydsy1705月赛]棋盘上的守卫2020-01-27 11:02:30

    Link 每行每列都建个点,把一个棋子看做是一条某行到某列边。 这样我们就是要找一个边集使得重定向之后可以让每个点的入度为\(1\)。 这个东西显然就是个最小生成基环森林,还是用Kruskal做,多记录一个森林是否有环就行了。 #include<cstdio> #include<cctype> #include<algorithm> n

  • BZOJ 2738. 矩阵乘法2020-01-26 14:52:03

      整体二分加上一个二维树状数组数点即可。 #include <bits/stdc++.h> namespace IO { char buf[1 << 21], *p1 = buf, *p2 = buf; int p, p3 = -1; void read() {} inline int getc() { return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1

  • BZOJ 3527. [Zjoi2014]力2020-01-26 09:53:32

    黑暗爆炸上没有spj。 第一部分的答案为 $\sum \limits_{j = 1}^{i - 1} q_j \times \frac{1}{(i-j)^2}$,直接卷积就行。第二部分就把 q 数组reverse一下再卷一遍。 #include <bits/stdc++.h> #define db long double const int N = 100000 * 3 + 7; db a[N], ans[N][2]; names

  • BZOJ 1058. [ZJOI2007]报表统计2020-01-25 20:53:20

      刚开始想手写平衡树来着,但是发现其实没必要,因为插入操作很友好。 对每个位置维护一个初始位置的值以及末尾位置的值,插入之前和当前位置的末尾值差一下加入set,和下一个位置的初始位置的值差一下加入set,删去当前末尾值与下一位置初始值的差即可。 另外一个也用一个set维护。 #i

  • BZOJ 1059. [ZJOI2007]矩阵游戏2020-01-25 20:51:35

      就是二分图匹配,直接匈牙利即可。 #include <bits/stdc++.h> const int N = 220; bool used[N]; int hascow[N], n, link[N][N]; bool find(int x) { for (int i = 1; i <= n; i++) { if (link[x][i] && !used[i]) { used[i] = 1;

  • BZOJ 1039. [ZJOI2008]无序运动Movement2020-01-25 18:01:34

      平移、旋转、放缩对两个相似三角形没有影响,那么一个长度为 $n$ 的轨迹就可以描述为 $n-2$ 个三角形,每个三角形就用相邻两边长来描述,还得加上第二条线段在第一条线段的逆时针还是顺时针方向,因为如果不加这个就会出现翻不翻转带来的影响,然后就变成了字符串匹配了。不过由于字符集

  • BZOJ 1040. [ZJOI2008]骑士2020-01-25 18:00:51

      基环森林上DP。 我刚开始想的就是找到环,然后把环上每个点及它的子树缩成一个点,就变成一个环上的DP了。然后就是强制第一个不取和强制最后一个不取。 看了别人的题解发现可以不用那么麻烦,只要找到环上任意相邻的两点,强制把这条边断开,然后还是DP两次就行了。 DP方程就比较naive

  • BZOJ 1038. [ZJOI2008]瞭望塔2020-01-25 15:00:08

        能看到其他所有点的区域就是轮廓线的半平面交。 然后最小高度就是半平面交与轮廓线这两个一次分段函数的差,极值肯定出现在分段点上,分别求一下即可。 #include <bits/stdc++.h> #define db double const db eps = 1e-9; inline int sign(db k) { return k < -eps ? -1 :

  • BZOJ-1143 [CTSC2008]祭祀2020-01-25 12:36:50

    Description   在遥远的东方,有一个神秘的民族,自称Y族。他们世代居住在水面上,奉龙王为神。每逢重大庆典, Y族都 会在水面上举办盛大的祭祀活动。我们可以把Y族居住地水系看成一个由岔口和河道组成的网络。每条河道连接着 两个岔口,并且水在河道内按照一个固定的方向流动。显

  • BZOJ 2038 小Z的袜子2020-01-24 12:55:42

    https://vjudge.net/problem/36887/origin 题目 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只

  • BZOJ 1003. [ZJOI2006]物流运输2020-01-23 14:05:27

      $cost[i][j]$ 表示第 $i$ 天到第 $j$ 天都走同一条路线时每天的最小花费,即为 $1$ 到 $m$ 的最短路。dijkstra即可。然后 $dp[i]$ 表示到第 $i$ 天的最小花费$dp[i] = min(dp[j] + cost[j + 1][i] * (i - j) + k)$ #include <bits/stdc++.h> #define pii pair<int, int> #defi

  • BZOJ 1005. [HNOI2008]明明的烦恼2020-01-23 14:02:23

    prufer序列为无根树的一种数列。长度为 $n - 2$prufer转无根树将最小编号的叶子删去,prufer序列加入其父亲。重复至树只剩下两个节点。无根树转prufer取出prufer首元素,与待选点集中最小未出现在prufer序列中的点连边,并将该点在待选点集中删去,直至待选点集剩下两个节点,将这两个节点

  • BZOJ 1007. [HNOI2008]水平可见直线2020-01-23 14:01:30

    可见的直线为一下凸壳。 先按斜率和截距从小到大排序,再用单调栈判断交点的相对位置即可。 #include <bits/stdc++.h> const int N = 5e4 + 7; const double eps = 1e-7; inline int dcmp(double x) { if (fabs(x) < eps) return 0; return x < 0 ? -1 : 1; } struct

  • BZOJ 1025. [SCOI2009]游戏2020-01-23 13:55:32

      根据题意,一种置换的排数就是循环节长度的 $\text{lcm} + 1$。 就变成把 $n$ 个数分成任意多个数,能组成的 $\text{lcm}$ 有多少种。 考虑一个数 $n = p_1 ^ {k_1} p_2 ^ {k_2} \cdots p_m ^{k_m}$ 是否能某些数的 $\text{lcm}$,且这些数的和为 $n$。 当每个数为 $p_1 ^ {k_1}, p

  • BZOJ 1000-10992020-01-21 22:55:01

    第一页的题解链接 BZOJ 1000-1009 BZOJ 1000 BZOJ 1001 BZOJ 1002 BZOJ 1003 BZOJ 1004 BZOJ 1005 BZOJ 1006 BZOJ 1007 BZOJ 1008 BZOJ 1009

  • bzoj口胡册2020-01-21 12:52:21

    【BZOJ3144】【HNOI2013】切糕首先考虑没有D限制,直接贪心选取,或者跑点点之间连边,跑最小割若D限制了,改一下建图就ok了【BZOJ1001】【BeiJing2006】狼抓兔子直接建边后跑网络流,不过注意,题目是无向图,反向边流量相同【BZOJ1002】 [FJOI2007]轮状病毒摘自https://blog.csdn.net/

  • @bzoj - 4259@ 残缺的字符串2020-01-20 20:02:38

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n。可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺。 你想对这两

  • 「题解」「BZOJ-4668」冷战2020-01-20 14:01:04

    题目 点这里 思路及代码 我们可以使用并查集的按秩合并(但是不要路径压缩)。 两个集合被合并起来,连上的边的权值就设为当前时间。 然后我们可以发现,询问 \(j\) 与 \(k\) 何时联通,就是查询 \(j\) 与 \(k\) 在并查集树路径上边权最大值。因为我们按秩合并了,所以树高是 \(\log ⁡n\) 的

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有