摘要: 因为之前没有看到过既有负数,还可以压位的高精度运算,所以我就自己发一篇(原来这么简单,我$1h$就写好了) 如果有什么$bug$,请在评论区回复或私聊我,我周末会看的。 本模板支持$+,-,\times,\div,\bmod,a^b,a^b \bmod x$ ### 模板 ```cpp #inclu 阅读全文
posted @ 2022-06-11 15:54 A_zjzj 阅读(55) 评论(0) 推荐(0)
摘要: int,char,double,long long,string,char[] 都可以输入输出 double 的输出方法 ```cpp double x=123.123;fout using namespace std;typedef long long ll; struct Precision{i 阅读全文
posted @ 2022-06-11 15:54 A_zjzj 阅读(260) 评论(0) 推荐(0)
摘要: 题目传送门 思路 一看就是构造题,显然要分成若干块 \(5\times5\) 的小块,然后发现对于一个小块中,只有最中间的那格可以从别的小块中一步跳进来。 然后我们打一个爆搜,打出从当前小块的中间走到各个方向相邻的小块的方案。 这样就可以在小块间移动了。 由于我们需要把所有的点都绕一遍,那么显然是在 阅读全文
posted @ 2022-06-11 15:53 A_zjzj 阅读(69) 评论(0) 推荐(0)
摘要: 题目传送门 题目大意 给定一个 \(n\) 个点的树,每个点有权值 \(v_i\),每条边也有权值 \(w_j\),对于树上一条简单路径,它的权值就是路径上(包括两端点)\(\min{\{v_i\}}\times\sum w_j\),求最大的路径权值。 思路 显然可以发现可以将每个点按照 \(a_i 阅读全文
posted @ 2022-06-11 15:52 A_zjzj 阅读(31) 评论(0) 推荐(0)
摘要: 题目大意 选出一个字符串序列 \(s\),使得对于每一个 \(s_i\),都是原串的子串,且每个 \(s_i\) 在 \(s_{i-1}\) 中都出现过至少两次,求最大的序列长度。 思路 发现其实可以做到让所有选出的字符串都是上一个字符串的后缀,因为如果后面留了一个尾巴,那么前面的字符串把这个尾巴砍 阅读全文
posted @ 2022-06-11 15:47 A_zjzj 阅读(39) 评论(0) 推荐(0)
摘要: 题目大意 给定 \(n\) 个主串和 \(m\) 个询问串。 对于每个询问串,求出最大的 \(l\),使得存在一种将当前询问串拆分成若干个长度 \(\ge l\) 且在任一主串中出现过的子串的方案。 思路 蒟蒻还是不会广义后缀自动机,所以我们就用 SA + st 表 + 二分 + 单调队列解决这道问 阅读全文
posted @ 2022-06-11 15:46 A_zjzj 阅读(40) 评论(0) 推荐(0)
摘要: 题目大意 给定 \(n\) 个字符串,求出每个字符串只属于该字符串的本质不同的非空子串的个数。 思路 如果没有做过这道 SA 入门题《不同子串个数》,那么请先了解这道题的 SA 做法。 首先老套路,把所有字符串拼接在一起。 然后单独考虑一个字符串 \(i\),首先求出这个字符串的每一个后缀有多少个前 阅读全文
posted @ 2022-06-11 15:41 A_zjzj 阅读(39) 评论(0) 推荐(0)
摘要: 思路 开始的时候想用倍增求 k 级祖先卡过去,然后就在考虑倍增数组 f[N][K],究竟是哪一维放在前面要快一点,所以都打了一下。 结果发现,一个会在 #9 TLE,另一个在 #8,#10 TLE,于是分成两类按照 \(2:1\) 的随机分布运行,然后就可以通过这道题了,最快用时:8.74s。 代码 阅读全文
posted @ 2022-06-11 15:40 A_zjzj 阅读(38) 评论(0) 推荐(0)
摘要: 题目大意 给定 \(n\) 个模板串,以及 \(m\) 个查询串,依次查询每一个查询串是多少个模板串的子串。 思路 蒟蒻不会广义 SAM,所以只能用 SA + 莫队的高复杂度笨重算法通过了。 首先把每个模板串和查询串拼接在一起(中间用不同的字符隔开),然后跑一遍 SA,对于每个查询串,记 \(i\) 阅读全文
posted @ 2022-06-11 15:39 A_zjzj 阅读(35) 评论(0) 推荐(0)
摘要: 思路 蒟蒻不会 SAM,所以只好用 SA + Manacher + st 表 + set + 单调栈 + 双指针的笨重做法了。 首先处理出每个点为中心的最长回文串长度 \(odd_i\),以及以 \(i\) 和 \(i+1\) 为中心左右对称的最长回文串长度 \(evn_i\),这一步可以用 Man 阅读全文
posted @ 2022-06-11 15:38 A_zjzj 阅读(60) 评论(0) 推荐(0)
摘要: day1 上午 先看了 PKUSC 2022 的开幕式,看了北大的介绍之类的,感觉似乎在损清华? 然后试机测试了一下,发现放了一道去年考的 T1。 下午 考试开始,先看了 \(3\) 道题,然后感觉 T3 似乎是个网络流,但是我不想打,就先打了一个二分+乱搞贪心,竟然可以拿 \(22pts\)(\( 阅读全文
posted @ 2022-06-11 15:37 A_zjzj 阅读(99) 评论(0) 推荐(1)
摘要: 思路 对于 \(T=0\) 的情况,直接建出后缀自动机,统计一下一个点为开始的字串有多少个,然后从上往下找就可以了。 对于 \(T=1\) 的情况,同样建出后缀自动机,统计一下每个字符串的出现次数,和刚刚一样做就好了。 细节不多。 代码 #include<bits/stdc++.h> using n 阅读全文
posted @ 2022-06-11 15:36 A_zjzj 阅读(33) 评论(0) 推荐(0)
摘要: 思路 一看就是差分约束,直接建边就好了。 代码 #include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std;typedef long long ll; struct Precisi 阅读全文
posted @ 2022-06-11 15:35 A_zjzj 阅读(33) 评论(0) 推荐(0)
摘要: 前言 ZJOI 王朝复辟???。。。 这次比赛在 5 月 3 号和 4 号,由于 qz 教育局什么五一不调休,正常放完双休回来,刚好比赛的两天就是周二周三,还做好了回来隔离半个月的心理准备,这两天算不了什么。 day0 比赛前一天下午 1 点半出发,坐的小(mian)巴(bao)车(che),虽然只 阅读全文
posted @ 2022-06-11 15:35 A_zjzj 阅读(113) 评论(0) 推荐(0)
摘要: 思路 那就直接摸你就好了吧。 代码 #include<cstdio> #include<cstring> #include<iostream> using namespace std;typedef long long ll; struct Precision{int x;Precision(int 阅读全文
posted @ 2022-06-11 15:32 A_zjzj 阅读(38) 评论(0) 推荐(0)
摘要: 思路 一看这个字符串长度很小,就直接暴力就好了。 然后我们需要一种快速的查看是否有一对大写字符相同的容器。 于是就可以想到用 \(26\) 进制+桶,这样就是一一对应了。 代码 #include<cstdio> #include<cstring> #include<iostream> using n 阅读全文
posted @ 2022-06-11 15:31 A_zjzj 阅读(45) 评论(0) 推荐(0)
摘要: 思路 首先一看就是统计有多少不同的字符串。 那么肯定就是用字典树了。 然后如果当前字符串与之前的某个字符串是一样的,那么一定会有使得每一次向下一个节点时,这个节点都是存在的。 最后记得清空。 代码 #include<cstdio> #include<cstring> #include<iostrea 阅读全文
posted @ 2022-06-11 15:31 A_zjzj 阅读(33) 评论(0) 推荐(0)
摘要: 比赛前一天 上午翻了翻打过的模拟赛(其实是翻 cqy 的提交记录发现有原题的),发现洛谷上都有很多紫题,于是贺了自己的代码过了好几道紫题和一道蓝题。 吃完饭简单收拾了一下就上大巴了。 在大巴上和 fls 坐一起,用我的电脑看了电影——《唐人街探案3》(事先下载下来的),还边吃自己带的零食边看电影,零 阅读全文
posted @ 2022-06-11 15:30 A_zjzj 阅读(51) 评论(0) 推荐(0)
摘要: @(目录) A solution 原题:[ZJOI2006]碗的叠放 显然枚举碗的叠放顺序,然后算一下高度就可以了。 高度的话,就处理出 \(i\) 放在 \(j\) 上面的增加的高度。 时间复杂度:\(O(n!\times n)\) 或 \(O(n!\times n^2)\)。 代码 #inclu 阅读全文
posted @ 2022-06-11 15:30 A_zjzj 阅读(51) 评论(0) 推荐(0)
摘要: 更好的阅读体验 题目传送门 Luogu,Codeforces 谈点其他的 这个题目翻译好像有亿点问题,我重新发一波。 给定一个长度为 \(n\) 的排列 \(p\)。 令其中第 \(i\) 个位置的权值为最长的包含 \(i\) 的单调区间的长度(不仅要权值单调,而且要连续)。例如,\(p=[4,1, 阅读全文
posted @ 2022-06-11 15:29 A_zjzj 阅读(53) 评论(0) 推荐(0)
摘要: 题目大意 给你 \(n\) 个区间 \([l_i,r_i]\) 以及每个区间的权值 \(w_i\),要求选择一些区间出来覆盖区间 \([1,m]\) (要求区间首尾相接),求选择的区间的 \(w\) 的极差的最小值。 思路 看到极差的最小值,想到二分,但不会验证,放弃! 然后分析了一下,这个首尾相接 阅读全文
posted @ 2022-06-11 15:28 A_zjzj 阅读(32) 评论(0) 推荐(0)
摘要: 题目大意 给你一个字符串,每次询问区间 \([l,r]\) 最小需要改变几个才能使得这个区间的所有子区间都不是长度至少为 \(2\) 的回文串。 思路 首先我们想一想所有子区间都不是长度至少为 \(2\) 的回文串长什么样子。 \(a_i\ne a_{i+1}\) \(a_i\ne a_{i+2}\ 阅读全文
posted @ 2022-06-11 15:27 A_zjzj 阅读(60) 评论(0) 推荐(0)
摘要: 题目大意 在一个长为 \(W\),宽为 $H$的房间中(左下角坐标 \((0,0)\),右上角坐标 \((W,H)\)),摆放着一张桌子,其左下角和右上角坐标分别为 \((x1,y1),(x2,y2)\),现在还要继续在房间里面放另一张长、宽分别为 \(w,h\) 的桌子,问是否可行,如果可行,输出 阅读全文
posted @ 2022-06-11 15:26 A_zjzj 阅读(48) 评论(0) 推荐(0)
摘要: 题目大意 有一个 \(2\times m\) 的矩阵,每次从 \((1,1)\) 号点,往下或往右走到 \((2,m)\)。Alice 先出发,把经过的点上的权值清空,然后 Bob 再出发,把经过的点上的权值加起来作为答案。Alice 希望最小化答案,Bob 希望最大化答案,求最后的答案。 思路 首 阅读全文
posted @ 2022-06-11 15:26 A_zjzj 阅读(88) 评论(0) 推荐(0)
摘要: 题目传送门 题目大意 给你一张无向图,图中每条边是蓝色或者红色的,让你每次选一个点,就会把与这个点相连的边的颜色反转(红变蓝,蓝变红),求最少步数的方案使得最后所有边的颜色都一样。 思路 好像没有 \(2-sat\) 的题解,那我就来一发。 首先分类讨论:要么都变成红色,要么都变成蓝色。 如果一条边 阅读全文
posted @ 2022-06-11 15:24 A_zjzj 阅读(57) 评论(0) 推荐(0)
摘要: @(为了不再被虐,我力争学会… ) 基本算法 枚举 题目链接 完成情况 自我评价 poj1753 Yes 上上等 poj2965 Yes 上上等 贪心 题目链接 完成情况 自我评价 poj1328 Yes 上上等 poj2109 Yes 上上等 poj2586 Yes 上上等 分治法 题目链接 完成 阅读全文
posted @ 2022-06-11 15:24 A_zjzj 阅读(34) 评论(0) 推荐(0)
摘要: 题目大意 你要得到 \(n\) 片披萨,有三种披萨可供选择: 一个 \(6\) 片,需要 \(15\) 分钟 一个 \(8\) 片,需要 \(20\) 分钟 一个 \(10\) 片,需要 \(15\) 分钟 求最少需要多少分钟才能至少得到 \(n\) 片披萨。 思路 首先看这三组数据,发现一个东西: 阅读全文
posted @ 2022-06-11 15:24 A_zjzj 阅读(45) 评论(0) 推荐(0)
摘要: @(目录在此) 2021-07-08~2021-07-22总结--zhengjun 7.8 考试过程 一开始看到 \(A\) 题,一看就是大水题,按照题目中说的算就行了,但是中途出了点错,调试了一下,发现忘记把角度转成弧度在算三角函数了,然后就可以了。 然后看了 \(B\) 题,看起来特别像那个启发 阅读全文
posted @ 2022-06-11 15:23 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 题目概述: 给你两个长度为 \(n\) 的字符串 \(a,b\),你需要找出 \(b\) 中有多少个不同的子串是 \(a\) 的子序列 思路: 可以枚举 \(a\) 中的子串,可是这样可能会有多个相同的子串被算了多次,那么,我们就可以用 \(Trie\) 树,然后从根节点开始向下搜,枚举每一个子串, 阅读全文
posted @ 2022-06-11 15:22 A_zjzj 阅读(61) 评论(0) 推荐(0)
摘要: 题目大意 其实就是给你 \(n\),让你求这个式子: \[ \sum\limits_{d\in prime,d\le n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}[\gcd(i,j)==d] \] 一看就是莫比乌斯反演,开始反演: \(\sum\limit 阅读全文
posted @ 2022-06-11 15:21 A_zjzj 阅读(62) 评论(0) 推荐(0)
摘要: 这道题其实就是一个数位 \(dp\) 裸题,就是他这个前缀 \(0\) 有一点难处理,所以就多开一维就行了。 代码 #include<cstdio> #include<cstring> #define ll long long using namespace std; ll f[13][2][2][ 阅读全文
posted @ 2022-06-11 15:18 A_zjzj 阅读(34) 评论(0) 推荐(0)
摘要: 一眼数位 \(dp\) 答案就是 \(sum_{1,r}-sum_{1,l-1}\),关键是如何求 \(sum_{1,num}\) 用 \(f_{i,j,0/1}\) 表示在第 \(i\) 位时,上一位填了 \(j\),是否顶到上界(就是比如说在 \(47\) 中,一开始选了 \(4\),那么顶到了 阅读全文
posted @ 2022-06-11 15:17 A_zjzj 阅读(30) 评论(0) 推荐(0)
摘要: 首先,我们可以贪心一下,把报废的时间按升序排序。 然后每到一个建筑,如果这个建筑可以修,那么就修了它。 如果不能修,那么就要看了,如果已经修了一个修筑时间大于当前不能修的建筑的修筑时间,那么显然是选当前这个好一点。 代码 #include<cstdio> #include<queue> #inclu 阅读全文
posted @ 2022-06-11 15:17 A_zjzj 阅读(51) 评论(0) 推荐(0)
摘要: 一眼看去就感觉是数位 \(dp\) 弱化版 + 路径输出 用 \(f_{i,0/1,j}\) 表示在从低到高的第 \(i\) 位,填了 \(0/1\),之前填了 \(j\) 个 \(1\) 的个数。 转移方程式显然就是: f[i][0][j]=f[i-1][0][j]+f[i-1][1][j]; f 阅读全文
posted @ 2022-06-11 15:15 A_zjzj 阅读(75) 评论(0) 推荐(0)
摘要: 题目背景 \(zjzj\) 大佬最喜欢的,就是找到一些红的数学题,把他们改变成蓝的,紫的,甚至黑的。 题目描述 有一天, \(zjzj\) 大(jù)佬(ruò) 看到了 \(fxt\) 蒟(dà)蒻(lǎo)出的一道题 \(:\) \(wangshengjun33\) 与 \(275307894a 阅读全文
posted @ 2022-06-11 15:14 A_zjzj 阅读(88) 评论(0) 推荐(0)
摘要: 题目传送门 这道题其实直接做就好了,枚举每一个数,把这个数拆分一下就行了。 代码: #include<cstdio> using namespace std; int sum[10001],l,r; int main(){ for(int i=1;i<=10000;i++){ int k=i,cnt 阅读全文
posted @ 2022-06-11 15:14 A_zjzj 阅读(39) 评论(0) 推荐(0)
摘要: 树形 \(dp\) 用 \(f_i\) 表示在编号为 \(i\) 的子树中共有多少种方案。 显然,\(f_u=\prod\limits_{v\subseteq son_u}{f_v}+1\) 后面的那个 \(1\) 就是考虑自身不要的情况。最后答案要减掉这个 \(1\) 代码 #include<cs 阅读全文
posted @ 2022-06-11 15:13 A_zjzj 阅读(33) 评论(0) 推荐(0)
摘要: 1.leetcode121. 买卖股票的最佳时机--zhengjun 2.leetcode122. 买卖股票的最佳时机 II--zhengjun 3.leetcode123. 买卖股票的最佳时机 III--zhengjun 4.leetcode188. 买卖股票的最佳时机 IV--zhengjun 阅读全文
posted @ 2022-06-11 15:11 A_zjzj 阅读(39) 评论(0) 推荐(0)
摘要: 因为这里有一个冷冻期,这就十分不好处理。 所以我们用 \(f_{i,0}\) 表示当前买来了股票,\(f_{i,1}\) 表示当前没有股票,处于冷冻期,$f_{i,2}$表示当前没有骨片也不处于冷冻期。(这个不一定是要在 \(i\) 这个点满足条件,也可以在 \(1\to i\) 之间某个值满足这个 阅读全文
posted @ 2022-06-11 15:10 A_zjzj 阅读(29) 评论(0) 推荐(0)
摘要: 用 \(f_{i,0}\) 表示到了第 \(i\) 天,当前买了股票的最大利润;\(f_{i,1}\) 表示到了第 \(i\) 天,当前没有买股票的最大利润。(还是不一定要刚好第 \(i\) 天满足这个条件,可以 \(1\to i\) 中的某个值满足) 显然,递推式就是 f[i][0]=max(f[ 阅读全文
posted @ 2022-06-11 15:10 A_zjzj 阅读(31) 评论(0) 推荐(0)
摘要: 用 \(f_i\) 表示 \(1\to i\) 交易一次的最大利润 用 \(ff_i\) 表示 \(1\to i\) 交易二次的最大利润 class Solution { public: int n,f[100001],ff[100001]; int maxProfit(vector<int>& a 阅读全文
posted @ 2022-06-11 15:09 A_zjzj 阅读(30) 评论(0) 推荐(0)
摘要: 先用 \(f_{i,j}\) 表示第 \(i\) 次交易,这次交易到 \(j\) 的最大利润。 这样 \(f_i\) 就可以从 \(f_{i-1}\) 那里直接得到,(参见leetcode123. 买卖股票的最佳时机 III--zhengjun 还要注意一下空间,要滚动 代码 class Solut 阅读全文
posted @ 2022-06-11 15:09 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 思路 因为只有唯一一次的交易次数,所以肯定要在前面选一个小的,在后面选一个大的。 用 \(minx\) 维护当前 \(1\to i-1\) 的最小值,然后就直接更新答案就可以了。 代码 class Solution { public: int maxProfit(vector<int>& a) { 阅读全文
posted @ 2022-06-11 15:08 A_zjzj 阅读(30) 评论(0) 推荐(0)
摘要: 思路 因为这道题可以交易任意次,所以,只要下一个比上一个大,那么肯定是取下一个更优。 如果从上一个开始买来,那么比原来的方案优了 \(a_i-a_{i-1}\),如果从之前的买来,那么还是比原来的方案多了 \(a_i-a_{i-1}\) 代码 class Solution { public: int 阅读全文
posted @ 2022-06-11 15:08 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 学习$sa$ 这次集训我在考试(楼下机房)中遇到了一道题,结果发现是个$sa$后缀数组题 然后——我就学了$sa$后缀数组,学了一个晚上,结果发现,连模板题都是紫色的!!!! 就这样,我就多 \(A\) 了 \(3\) 道紫题和 \(1\) 道黑题。 听北大学长讲课$(ljn)$ 第一天是讲杂题,主 阅读全文
posted @ 2022-06-11 15:07 A_zjzj 阅读(29) 评论(0) 推荐(0)
摘要: 循环队列 template<typename item,const int _size> class cirqueue{ private: item q[_size]; int head,tail; int len; public: cirqueue(){ memset(q,0,sizeof(q)) 阅读全文
posted @ 2022-06-11 15:06 A_zjzj 阅读(34) 评论(0) 推荐(0)
摘要: 一看就不能用求根公式 首先,因为 \(a_i\) 很大,如果要高精度的话,时间复杂度都过不去。 那么,我们考虑把这个大数取模,这样如果弄出来是零,这个值就有可能是一个根。 这个模数最好是一个大质数,这样正确率会高一点 代码 #include<bits/stdc++.h> #define ll lon 阅读全文
posted @ 2022-06-11 15:06 A_zjzj 阅读(53) 评论(0) 推荐(0)
摘要: 首先,如果 \(n\) 个都要选,那么显然,应该先把 \(b\) 值大的先选掉,这样浪费最小。 基于这种想法之上,我们就可以先按 b 排个序,然后 \(dp\) 用 \(f_{i,j}\) 表示在前 \(i\) 个中选了 \(j\) 个的最大金币数 所以递推式就十分显然,\(f_{i,j}=\max 阅读全文
posted @ 2022-06-11 15:05 A_zjzj 阅读(52) 评论(0) 推荐(0)
摘要: 因为每一条边都要走个遍,所以 如果一个点的入度等于出度,那么在这个点一定不用走路。 如果一个点的入度小于出度,那么肯定还要从其他的点走路到这个点 如果一个点的入度大于出度,那么肯定还要从这个店走路到其他的点 现在,我们只要知道每一个点的入度减掉出度。 比如样例 很显然,让 \(②\) 和 \(①\) 阅读全文
posted @ 2022-06-11 15:05 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 首先,可以爆搜,不过分比较少。 然后,我们可以算出每条边,然后把边按照距离排个序。就可以转换成线性 \(dp\) 用 \(f_i\) 表示到了第 \(i\) 条边最多可以拿到几个点心 但是,还有一点要考虑,如果有一坨边的距离都一样,那么应该取走那条边呢。 所以,我们可以另外开一个数组记录一下就可以了 阅读全文
posted @ 2022-06-11 15:04 A_zjzj 阅读(63) 评论(0) 推荐(0)
摘要: 其实是一道结论题。 因为模完之后一定有 \(k\) 个取模后的结果,而每一个取模之后的结果都在 $[0,k-1]$中。 \(n\%1=0\)。 而 \(n\%2\) 不能和 \(n\%1\) 的结果相同,所以$n%2=1$ 同理得,\(n\%3=2\) \(\cdots\) \(n\%k=k-1\) 阅读全文
posted @ 2022-06-11 15:03 A_zjzj 阅读(45) 评论(0) 推荐(0)
摘要: 一看题目,搜索题啊。 首先,枚举排列,然后验证是否在同一条斜线上 设有两个点是 \(i,j\) 那么如果他们在从左上到右下↘的斜线上,那么一定满足$X_i-Y_i=X_j-Y_j$ 如果他们在从左下到右上↗的斜线上,那么一定满足$X_i+Y_i=X_j+Y_j$ 所以打出代码: #include<c 阅读全文
posted @ 2022-06-11 15:02 A_zjzj 阅读(25) 评论(0) 推荐(0)
摘要: 一道哈希题。 因为只有两个关键字,直接用进制哈希。 然后存到一个数组里面,每次边更新答案边哈希 代码 #include<cstdio> using namespace std; int n; char a[100],b[100]; int get1(int i){//对城市开头的哈希 return 阅读全文
posted @ 2022-06-11 15:01 A_zjzj 阅读(47) 评论(0) 推荐(0)
摘要: 看数据可以猜测:这是一道状态压缩的动态规划题 没错。 我们用 \(f_i\) 表示在 \(i\) 状态下最少需要多少节点。 那么转移方程就是: \[ f_i=\min\limits_{j\&i=j}{f_j+f_{i-j}-lcp(i)} \] 这个 \(lcp(i)\) 就是在 \(i\) 状态下 阅读全文
posted @ 2022-06-11 15:00 A_zjzj 阅读(47) 评论(0) 推荐(0)
摘要: 其实不难,手推一下就发现规律: \(X_{m(k+1)+1}=A_1\) \(X_{m(k+1)+2}=A_2\) \(\cdots\) \(X_{m(k+1)+k}=A_k\) \(X_{m(k+1)}=A_1 ⊕A_2⊕\cdots⊕A_k\) 所以代码就不难了。 #include<cstdio 阅读全文
posted @ 2022-06-11 14:59 A_zjzj 阅读(27) 评论(0) 推荐(0)
摘要: \(n\) 次 \(dfs\) 即可,细节见代码 直接用两点间距离公式:\(d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\) 看一下能不能从 \(u\) 到 \(v\),如果可以的话,就继续搜下去,否则就回溯。 #include<cstdio> #include<cstring> 阅读全文
posted @ 2022-06-11 14:59 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 传送门:主题库/比赛里 题目大意 给你 \(n\) 个数,你可以选一个数让他插到原数组中的任意位置,经过多次操作后,使得每一个第 \(1\) 到 \(k\) 小的数都在 \(k+1\) 到 \(k+n\) 位置中,每一个第 \(k+1\) 到 \(k\times2\) 小的数都在 \(k+1\) 到 阅读全文
posted @ 2022-06-11 14:58 A_zjzj 阅读(11) 评论(0) 推荐(0)
摘要: 一道模拟题 每一次 add 的时候,就不用管直接扔进栈里面,因为你在这个时候排个序不如之后 remove 的时候排序。 然后每一次 remove 的时候。 如果栈顶是当前要出栈的数,那么直接让他出去。 否则,就需要排一次序,把答案加一。 因为这样已经拍过序了,所以之后的已经不用排了,那么就直接把这些 阅读全文
posted @ 2022-06-11 14:57 A_zjzj 阅读(36) 评论(0) 推荐(0)
摘要: @(暑假刷题记录--zhengjun) 7月份 7.1 P3388 【模板】割点(割顶)tarjan割点模板 原题 7.15 P3371 【模板】单源最短路径(弱化版) 单源最短路SPFA/Dij模板 原题 P1948 [USACO08JAN]Telephone Lines S二分答案+最短路SPF 阅读全文
posted @ 2022-06-11 14:56 A_zjzj 阅读(72) 评论(0) 推荐(0)
摘要: 一道函数递归题 记录一下当前的是第几层和现在要分的数是几(分别用 \(x\) 和 \(y\) 表示) 然后,每一次从小到大枚举因子,继续递归直到输出的总数到达 \(10^5\)。 #include<cstdio> #include<cmath> #define ll long long using 阅读全文
posted @ 2022-06-11 14:55 A_zjzj 阅读(36) 评论(0) 推荐(0)
摘要: 一道细节题 因为英文和数字很少,所以就枚举要提醒的字母和数字,验证是否可以算出来然后再更新答案。 可以推出来的有以下几种: 已知颜色,数字未知的只剩下一个 已知数字,颜色未知的只剩下一个 最后剩下一个 代码 #include<cstdio> #include<cstring> using names 阅读全文
posted @ 2022-06-11 14:55 A_zjzj 阅读(37) 评论(0) 推荐(0)
摘要: 一道简单的思维题 我们先按照题目中所说: 给定两个正整数 \(n,m(m\le n)\),对于一个 \(n\) 阶 \(0-1\) 方阵, 其任意 \(m\) 阶子方阵中至少有一个元素 “\(0\)”,则可以求解这个方阵中的 “\(1\)” 的最大数目。 那么显然,每一个 \(0\) 都填在 \(( 阅读全文
posted @ 2022-06-11 14:54 A_zjzj 阅读(40) 评论(0) 推荐(0)
摘要: 竟然又没有人做这题了 一道二分题 其实就是要找什么时候这个怪兽被打了 \(a_i\) 次,可以知道,这是有单调性的,我们就可以二分。 因为 \(Vanya\) 一秒打 \(x\) 次,那么每 \(\frac{1}{x}\) 他就打一次,所以我们直接把 \(mid\div x+mid\div y\) 阅读全文
posted @ 2022-06-11 14:53 A_zjzj 阅读(40) 评论(0) 推荐(0)
摘要: 一道找规律题 直接找一下规律就可以了。 先算出来后面可以有多少个9,然后枚举第一位是什么,算出有多少答案就可以了。 代码 #include<cstdio> #include<algorithm> #define ll long long using namespace std; ll n,pow10 阅读全文
posted @ 2022-06-11 14:52 A_zjzj 阅读(29) 评论(0) 推荐(0)
摘要: 一道贪心题 为了让这个序列达到中位数且总和最小,那么肯定是中位数越小越好,就让他是 \(y\) 。 因为中位数是从小到大排序之后第 \(\lfloor\frac{n}{2}\rfloor+1\) 个数,所以比中位数小的数一共有 \(\lfloor\frac{n}{2}\rfloor\) 。 那么为了 阅读全文
posted @ 2022-06-11 14:52 A_zjzj 阅读(30) 评论(0) 推荐(0)
摘要: solution 一道$bell$数题:贝尔数-百度百科 预处理出$bell$数,我用的这个递推式 \(B_{n+1}=\sum\limits_{k=0}^{n}C_{n}^k\times B_k\) 然后,如果每个数都有几位是一样的(例如样例每个数第一位和第二位一样,第三位和第五位一样,第三位一样 阅读全文
posted @ 2022-06-11 14:46 A_zjzj 阅读(38) 评论(0) 推荐(0)
摘要: solution 一道$dp$好(duliu)题 用$f_{i,j}$表示前$i$位模$3$是$j$最少要删掉几个数 那么转移方程就很显然了: \(f_{i,j}=\min\{f_{i-1,j}+1,f_{i-1,(j-c_i+3)\bmod3}\}\) 初始化:\(f_{1,0}=1,f_{1,( 阅读全文
posted @ 2022-06-11 14:44 A_zjzj 阅读(65) 评论(0) 推荐(0)
摘要: solution 一道贪心题。 如果有两个人分别在$x$和$y$来($x<y$且这两个人来的时刻的中间没有其他人) 那么$Vasya$从$x+m$到$y-1$这段时间来都一样,那么我们就枚举每一个人,然后看看如果$Vasya$在这个人之前插进去最少要等多长时间,更新答案就可以了 #include<c 阅读全文
posted @ 2022-06-11 13:55 A_zjzj 阅读(34) 评论(0) 推荐(0)
摘要: 竟然没有人做这道题 solution [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50N9CEMt-1597798316871)(https://cdn.luogu.com.cn/upload/vjudge_pic/CF774G/5594570290c0b989f3 阅读全文
posted @ 2022-06-11 13:54 A_zjzj 阅读(56) 评论(0) 推荐(0)
摘要: 强连通就是在一个有向图中任何一个点都可以到达除这个点之外的所有点。 然后,在处理的时候,就可以把这一个子图直接变成一个点。 比如说这张图 就可以缩成这张图 原图中的 就是一个强连通 也就是说只要有环,就一定有一个强连通(其实自己一个也算一个强连通) 然后,就是找环的环节~~~~重点 找环,其实就是看 阅读全文
posted @ 2022-06-11 13:52 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 题目背景 $zjzj$和$xx$玩一个运气游戏,首先,在若干个卡片上各写一个正整数,然后,$zjzj$和$xx$各选一张卡片,不会让对方知道,不可以相同,再把这两个数拼在一起$(\(zjzj$选的数放在前面,例如$2$和$5$拼成了$25\))$,如果这个数是$k$的倍数,那么$zjzj$赢,否则, 阅读全文
posted @ 2022-06-11 13:51 A_zjzj 阅读(288) 评论(0) 推荐(0)
摘要: 这个题目名称十分诡异。 然后我可以提供两种做法,复杂度一样,都是$O(n\log n)$的。 方法一 因为我们每一次使用魔法,就会让那个什么鬼畜的人物多走个$a_i$天,所以就可以贪心,每一次只要取大的就可以了,然后因为每一次都要加在一起看看够不够,所以就可以二分了。 代码 #include<bit 阅读全文
posted @ 2022-06-11 13:49 A_zjzj 阅读(98) 评论(0) 推荐(0)
摘要: 我一开始就打出来了,可是忘记一个很重要的剪枝,就是如果当前的步数已经超过答案的步数就不用搜了,还有就是每一个点的每一种状态都只能走到一次(其实就是走到一个点,之前使用了相同的魔法已经到过这个点)那么也不用搜下去了。 代码 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2022-06-11 13:48 A_zjzj 阅读(57) 评论(0) 推荐(0)
摘要: 一看,这个就是一个组合数学,如图所示 这样,很容易想到分类讨论,如果$x,y$在两侧和$x,y$在同侧。 如果是两侧的话,就可以枚举这两个位置的高度然后用组合数算出来就可以了。然后的话如果在同侧就不用管什么东西,把第$x$个位置到第$y$个位置的所有位置都是一样高的,就可以看成一个城市,剩下的左边$ 阅读全文
posted @ 2022-06-11 13:46 A_zjzj 阅读(51) 评论(0) 推荐(0)
摘要: 题面传送门 思路 因为最多只能两个物品一起,所以排个序,然后用两个指针,如果这两个可以,那就两个都要了,否则就只能要大的一个 代码 #include<bits/stdc++.h> using namespace std; int n,m; int a[30001]; int main(){ scan 阅读全文
posted @ 2022-06-11 13:44 A_zjzj 阅读(50) 评论(0) 推荐(0)
摘要: 题面传送门 思路 因为跑和使用魔法不能同时执行,所以可以先处理光光使用魔法,然后再处理跑的情况 代码 #include<bits/stdc++.h> using namespace std; int m,s,t; int f[300001]; int main(){ scanf("%d%d%d",& 阅读全文
posted @ 2022-06-11 13:44 A_zjzj 阅读(40) 评论(0) 推荐(0)
摘要: 题面传送门 思路 用结构体拍个序,然后输出就可以了。 代码 #include<bits/stdc++.h> using namespace std; int n; struct zj{ int x,y,z,sum,num; bool operator < (const zj &a)const{ if 阅读全文
posted @ 2022-06-11 13:43 A_zjzj 阅读(46) 评论(0) 推荐(0)
摘要: 题面传送门 思路 一看嘛,不就是两遍$dp$,结果标签上写着个单调队列,我怎么想不出来如何单调队列啊。 于是,就只好打了暴力$dp$结果$A$了。 代码 #include<bits/stdc++.h> using namespace std; int n; int a[101]; int f1[10 阅读全文
posted @ 2022-06-11 13:41 A_zjzj 阅读(66) 评论(0) 推荐(0)
摘要: 题面传送门 思路 我明知正解是枚举每一位是否进位然后用高斯消元来验证是否有解。 可是我偏不!!!! 我偏偏$dfs$。 剪枝剪枝+剪枝。 剪枝一:从低位的数开始搜索。 剪枝二:枚举每一个字母是什么数的时候从大到小枚举。 剪枝三:因为每一位最多只会进1,所以判断每一位如果不是这样的就直接$return 阅读全文
posted @ 2022-06-11 13:41 A_zjzj 阅读(35) 评论(0) 推荐(0)
摘要: 题面传送门 思路 本蒟蒻表示:我只会用优先级队列做。 贪心:每一次只要取出最少的两堆合并就可以了。 代码 #include<bits/stdc++.h> using namespace std; int n; priority_queue<long long,vector<long long>,gr 阅读全文
posted @ 2022-06-11 13:39 A_zjzj 阅读(45) 评论(0) 推荐(0)
摘要: 题面传送门 思路 $STL$真好,有两个函数: next_permutation() prev_permutation() 分别是求出数组的下一个排列,和上一个排列。 可以就返回$1$,如果无法操作了,返回$0$ 代码 #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2022-06-11 13:38 A_zjzj 阅读(64) 评论(0) 推荐(0)
摘要: 题面传送门 思路 一道模拟题,注意下细节 代码 #include<bits/stdc++.h> int s,h; int main(){ int x; for(int i=1; i<=12; i++){ scanf("%d",&x); s=s-x+300; if(s<0){ printf("-%d" 阅读全文
posted @ 2022-06-11 13:38 A_zjzj 阅读(53) 评论(0) 推荐(0)
摘要: 题面传送门 思路 因为只有唯一的顺序才完所有的花生,所以直接模拟即可 代码 #include<bits/stdc++.h> using namespace std; int n,m,t; int k; struct zj{ int x,y,sum; bool operator < (const zj 阅读全文
posted @ 2022-06-11 13:37 A_zjzj 阅读(73) 评论(0) 推荐(0)
摘要: 题面传送门 思路 直接$dfs$,注意要输出后序,即为先左子树再右子树最后根 代码 #include<bits/stdc++.h> using namespace std; int n; string a; void dfs(int l,int r){ if(l<r){ dfs(l,(l+r)>>1 阅读全文
posted @ 2022-06-11 13:37 A_zjzj 阅读(28) 评论(0) 推荐(0)
摘要: 题面传送门 思路 一道模拟题,直接打擂台即可 代码 #include<bits/stdc++.h> using namespace std; int n,k,maxx; int x,y; int main(){ for(int i=1;i<=7;i++){ cin>>x>>y; if(x+y>max 阅读全文
posted @ 2022-06-11 13:36 A_zjzj 阅读(59) 评论(0) 推荐(1)