被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串匹配起来如果某一位两个串是1和1 则礁石与舰艇会在同一位置不可能到达 那么这个匹配所对应的图中的位置就不成立 因为要确定每个位置可以想到将T翻转后做FFT后每一位(每一位代表了一个小矩形的匹配情况)上结果是0就可以匹配上 为1不成立 选出为0的 做一遍BFS 求出可以到达的位置 可以发现可行的状态里…
https://www.lydsy.com/JudgeOnline/problem.php?id=5217 Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格图,其中有些位置是“.”,表示这一格是海水,可以通过:有些位置是“#”,表示这一格是礁石,不可以通过:有些位置是“o”,表示这一格目前有一艘舰,且舰离开这一格之后,这一格将变为“.”.这些“o” 表示Byteasar 的舰队,他们每天可以往上下左右中的一个方向移动一格,但不能有任何一艘舰驶出地图.特…
Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格图,其中有些位置是" .",表示这一格是海水,可以通过:有些位置是"#",表示这一格是礁石,不可以通过:有些位置是"o",表 示这一格目前有一艘舰,且舰离开这一格之后,这一格将变为".".这些"o" 表示Byteasar 的舰队,他们每天 可以往上下左右中的一个方向移动一格,但不能有任何一艘舰…
5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #incl…
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 93  Solved: 53[Submit][Status][Discuss] Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建m条双向道路,其中修建第i条道路的费用为ci.B yteasar作为Byteland公路建设项目的总工程师,他决定选定一个区间[l,r],仅使用编号在该区间内的道路.他希 望选择一些道路去修…
5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 66  Solved: 37[Submit][Status][Discuss] Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建m条双向道路,其中修建第i条道路的费用为ci.B yteasar作为Byteland公路建设项目的总工程师,他决定选定一个区间[l,r],仅使用编号在该区间内的道路.他希 望选择…
传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt(m)sqrt(m)*sqrt(m)sqrt(m)∗sqrt(m)的动态数组按块存储询问. 这样好写得多. 还有就是学习了korasaju用bitset优化的写法. 代码: #include<bits/stdc++.h> #define N 155 #define M 300005 #define…
题意: 这题显然直接tarjan是做不了的. 这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客 于是结合莫队,我们有了个暴力. 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用bitset优化一下就过了. 注意有重边,不能直接在biset中删除,要开个邻接矩阵判一下. code: #include<bits/stdc++.h> using namespace std; #define re register typedef long long ll; const int…
题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列变为不下降数列的最小花费. 题解: 第一部分(上下界最小费用可行流): 设$h_0=-inf,h_{n+1}=inf$,令$a$为$h$的差分数组,即$a_i=h_{i}-h_{i-1}$.考虑当对于区间$[l,r]$操作时(比如+1),相当于$a_{r+1}$减少1,$a_{l}$增加1.若将$a$数组…
传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙. 然后就可以矩阵快速幂优化了. 代码: #include<bits/stdc++.h> #define ll long long using namespace std; ll a,b,n,mod; struct Matrix{ ll a[3][3]; Matrix(){a[0][0]=a[0]…
裸题 注意+特判 #include<cstdio> using namespace std; const int mod=1e9+7; int F[1000005],mi[10000005],ni[10000005],G[1000005]; int pow(int a,int b){ int ans=1; while (b){ if (b&1) ans=1ll*ans*a%mod; a=1ll*a*a%mod; b=b>>1; } return ans; } int C(i…
题目思路挺巧妙的. 感觉应该可以数据结构一波,发现n很小可以搞搞事啊.然后又发现给了512mb,顿时萌生大力线段树记录的念头 一开始想的是记录节点的fa,然后发现搞不动啊?? 但其实边肯定最多只有n-1条,那么就可以记录选择的边,然后用归并合并即可 没清空答案还wa可一次(lll¬ω¬),浪费时间写暴力和拍(lll¬ω¬) #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib&…
题意: 做法来自 首先竞赛图缩点后是一条链,\(1\)号节点在开头的那个\(SCC\)中,因此从\(1\)号节点出发的最长链即为\(1\)号节点所在的\(SCC\)的大小\(+1\)号节点拓扑序之后的所有\(SCC\)的大小之和. 设\(f_i\)表示\(i\)个点的竞赛图数量,显然有\(f_i=2^{\frac{n*(n-1)}{2}}\). 设\(g_i\)表示大小为\(i\)的竞赛图且是\(SCC\)方案数,有: \(g_i=f_i-\sum\limits_{j=1}^{i-1}C_i^j…
要找的就是这棵树的带权重心,以带权重心为根时每棵子树的权值和不超过总权值和的一半. 因此按$\frac{v[i]}{\sum v[i]}$的概率随机选取一个点$x$,则重心有$\frac{1}{2}$的概率落在$1$到$x$的路径上,期望随机次数为$O(1)$. 随机方式可以直接随机一个$1$到$\sum v[i]$之间的数,然后相当于找第$k$小值,线段树上二分可以做到$O(\log n)$定位. 设$sum[x]$表示$x$子树的权值和,可以用LCT打标记维护. 在表示$1$到$x$路径的S…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在Byteland一共有n个城市,编号依次为1到n,形成一个n个点的竞赛图. 请写一个程序,帮助Byteasar计算有多少种道路修建方式,使得从1号点出发的最长简单路径经过点数恰好为k,由 于答案可能很大,请对P取模输出 Input 第一行包含两个正整数n,P,表示点数和模数. 2≤P≤1e9,N<=2000 Output 输出n行,第i行输出从1出发的最长简单…
题目大意:给你一棵n个点的树,每个点有颜色,m次询问,每次询问一个点x的子树内深度不超过depth[x]+d的节点的颜色数量,强制在线.(n,m<=100000,多组数据,保证n,m总和不超过500000) 思路:若不考虑深度限制,我们可以先给每个点赋点权1,再把每种颜色的节点按dfs序排序后相邻的节点的LCA的点权减1,每次求子树和即可回答询问,若有限制深度,我们可以按深度顺序把点一个个加入树中,每种颜色用个set维护,强制在线只要把求子树和的线段树可持久化就可以了,总复杂度O(nlogn).…
听学长说有比赛就随便打一打. A.普通计算姬 题目大意:给出一棵带权树,支持一下两种操作:1.修改一个点的权值:2.给出l,r,询问以点l为根的子树和.点l+1为根的子树和.点l+2为根的子树和--点r为根的子树和的总和.(点数.操作数不超过10^5) 思路:感觉是三题中最难的.给出的[l,r]区间在树上没有实际意义,不好利用数据结构维护.考虑若不修改,可以一遍dfs算出每个点对应的dfs序,这样每棵子树都对应一个dfs序的区间,前缀和一下就能O(1)查子树和,再按点的编号顺序把子树和前缀和一下…
提高十连测day3 A 我们可以枚举两个 $ 1 $ 之间的相隔距离,然后计算形如 $ 00100100 \cdots $ 的串在原串中最⻓⼦序列匹配即可,复杂度 $ O(n^2) $ .寻找 $ S $ 在 $ T $ 中的最⻓⼦序列匹配直接贪⼼的扫⼀遍就⾏了. 我们可以考虑优化这个过程,快速匹配连续的 $ 0 $ .只要⼆分找出下⼀个 的匹配位置即可. 由于 $ 1 $ 的个数为调和级数 ,所以总复杂度 $ O(n \log n) $ . #include<iostream> #inclu…
额 掰手指头一数 特么又是第三年十连测了= = 2017一场没打 那时候好像一场比赛也就100人左右 2018前几场还都好好补了 后来开始放飞自我了 这时候一场有150人还多了 2019想让今年的Noip不留遗憾 好像一场有200人多 现在好的能冲进前十不好也就三四十 主要是把题解里可以借鉴的思路和代码罗列一下 一. A.(ZROI954) 考虑对这玩意dp pi=1等价于右括号 pi=2等价于左括号 pi=3等价于左右任选括号 我们需要让其括号匹配的代价尽量小 然后排序顺序按照能力值大小,相等…
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #include <string.h> #include <time.h> #include <stdlib.h> #include <string> #include <bitset> #include <vector> #include <…
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define maxn 100005 #define maxk 256 int n,type,ans,sum,a[maxn],f[maxk][maxk],g[maxk][maxk]; bool v[maxk]; ];…
目录 题意 输入格式 输出格式 数据范围 思路 代码 题意 有n个点,m条双向道路,其中第条公路的两个端点是u[i],v[i],费用是c[i]. 现在给出q个询问,每次给定一个L和一个R,要求你只能够使用[L,R]这个区间内的边,是的连接之后,连通块的数量最小.在保证连通块数量最小的情况下,求最少需要的代价(可以拿一些边不用). 输入格式 第一行三个整数n,m,q,含义如图所示 接下来m行,每行3个整数,描述一条边,分别是u,v,c. 接下来q行,每行2个整数L,R,表示一次询问. 输出格式 对…
第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号和密码... 但是总该叙述一下题意 一个组两个人 一个组长一个组员 每个人都有两个属性w经验s工资要求w组长>=w组员 有一部分人是组长 一部分人是组员 一部分是既可以是组长也可以是组员. 现在问 要求组成k组的最小花费如果不可能的话输出-1.显然 2*k<=n... 而这里 有点像一个二分图 但…
A. 奥义商店 有一个商店,n个物品,每个物品有一个价格和一种颜色. 有m个操作,操作有两种,一种是修改一个位置的价格,另一种是购买,每次购买指定一个公差d和一个位置k,找到包含这个位置k公差为d的同色最长等差数列,买下所有物品.让你给这个位置染成t种颜色中的一种(你来指定),其他位置会随机染成t种颜色之一,并保证这n-1个物品中第j种颜色的恰好有c[j]个.求最小期望花费保留四位小数. 注意询问相互独立,询问不会买走物品. 1<=n,m<=10^5,∑t<=2*10^5. 首先我们考虑…
A:平均数 题意:有一天,小 A 得到了一个长度为 n 的序列. 他把这个序列的所有连续子序列都列了出来,并对每一个子序列都求了其平均值,然后他把这些平均值写在纸上,并对它们进行排序,最后他报出了第 k 小的平均值.你要做的就是模仿他的过程. 做法:因为题目中的k很大,所以考虑二分答案,问题就是转化有多少个子序列的平均值小于等于k,我们把每个序列用mid减去它,然后维护一个前缀和,问题就变成了求这个前缀和数组的逆序对数,用归并排序或树状数组+离散化维护即可. B:涂色游戏 题意:小A和小B在做游…
A: Divisors 题意:给定 m 个不同的正整数 a 1 ,a 2 ,...,a m ,请对 0 到 m 每一个 k 计算,在区间 [1,n] 里有多少正整数 是 a 中恰好 k 个数的约数. n,ai<=10^9,m<=200 做法:每个数的约数个数为sqrt(n)级别的,所以一共有msqrt(ai)个,对于计算答案,用哈希表判重计算即可. B:Market 题意:在比特镇一共有 n 家商店,编号依次为 1 到 n.每家商店只会卖一种物品,其中第 i 家商店的物品 单价为 c i ,价…
A:String Master 题目:所谓最长公共子串,比如串 A:"abcde",串 B:"jcdkl",则它们的最长公共子串为串 "cd",即长 度最长的字符串,且在两个串中都作为连续子串出现过.给定两个长度都为 n 的字符串,对于字符串大师的你来说,求它们的最长公共子串再简单不过了.所以现在你有 k 次修改机会,每次你可以选择其中某个串的某个位置,将其修改成任意字符.你需要合理使用这 k 次修改机会,使得修改之后两个串的最长公共子串最长.相…
Claris大爷出的一套模拟题.问别人要到了一份题,加深了自己NOIp要滚粗的感觉. Matser zzDP题,我只能说我第一遍写的时候还写崩了QAQ. //master //by Cydiater //2016.10.21 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <string> #include <algor…
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; #define maxn 100005 #define maxk 4000005 ],R[maxn][]; void read(int &x){ x=; ; char ch; ; +ch-'; x*=f; }…
思路:考虑建立可持久化线段树,第一层维护的是i这个位置的next位置,第二层,维护的是接下来走这个字符会到哪个节点. 感觉很巧妙啊,不愧是Claris #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<iostream> ],l[],r[],sz; ],root[]; int read(){ ,f=;char ch=getchar();…