ACM
文章平均质量分 55
我的ACM笔记
Moonlight丶shadow
这个作者很懒,什么都没留下…
展开
-
素数筛(埃氏素数筛+线性筛)
埃氏素数筛这个比较容易理解,将每个素数的倍数筛掉就可以了。#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <cmath>#include <string>using namespace std;typedef原创 2021-07-25 18:54:02 · 65 阅读 · 0 评论 -
POJ 3579 Median (二分)
POJ 3579 Median (二分)DescriptionGiven N numbers, X1, X2, … , XN, let us calculate the difference of every pair of numbers: ∣Xi - Xj∣ (1 ≤ i < j ≤ N). We can get C(N,2) differences through this work, and now your task is to find the median of the differenc原创 2021-07-23 21:40:30 · 90 阅读 · 0 评论 -
最长异或值路径(dfs + Trie树)
题目链接:最长异或路径给定一个树,树上的边都具有权值。树中一条路径的异或长度被定义为路径上所有边的权值的异或和。给定上述的具有n个节点的树,输出异或长度最大的路径。Input第一行包含整数n,表示树的节点数目。接下来n-1行,每行包括三个整数u,v,w,表示节点u和节点v之间有一条边权重为w。Output输出一个整数,表示异或长度最大的路径的最大异或和。ExampleInput40 1 31 2 41 3 6Output7Note样例中最长异或值路径应为0->1-&原创 2021-07-24 21:42:07 · 193 阅读 · 0 评论 -
HDU 4821 String (字符串哈希)
Given a string S and two integers L and M, we consider a substring of S as “recoverable” if and only if(i) It is of length M*L;(ii) It can be constructed by concatenating M “diversified” substrings of S, where each of these substrings has length L; two s原创 2021-08-03 17:51:02 · 107 阅读 · 0 评论 -
Codeforces 660C Hard Process (尺取)
题目链接:Hard ProcessYou are given an array a with n elements. Each element of a is either 0 or 1.Let’s denote the length of the longest subsegment of consecutive elements in a, consisting of only numbers one, as f(a). You can change no more than k zeroes to原创 2021-07-24 09:07:50 · 111 阅读 · 0 评论 -
POJ 2556 Bound Found (排序+尺取)
题目链接:Bound FoundDescriptionSignals of most probably extra-terrestrial origin have been received and digitalized by The Aeronautic and Space Administration (that must be going through a defiant phase: “But I want to use feet, not meters!”). Each signal se原创 2021-07-24 09:16:35 · 77 阅读 · 0 评论 -
HDU 3336 Count the string (KMP+DP)
It is well known that AekdyCoin is good at string problems as well as number theory problems. When given a string s, we can write down all the non-empty prefixes of this string. For example:s: “abab”The prefixes are: “a”, “ab”, “aba”, “abab”For each pre原创 2021-08-03 15:02:13 · 102 阅读 · 0 评论 -
Codeforces Round #739 (Div.3) F1,F2
F1题解:因为1 <= k <= 2,所以可以直接讨论k == 1和k == 2的情况,方便计算,使用字符串处理当k == 1的时候,我们只需找到第一个大于等于n的由一个数字组成的字符串即可string solve1(string n){ for (int ch = '1'; ch <= '9'; ch ++ ) { string t(n.size(), ch); if (t >= n) return原创 2021-08-23 11:37:25 · 92 阅读 · 0 评论 -
Gym - 102174H 目标是成为数论大师
题目链接:https://codeforces.com/gym/102174/problem/H小白非常不擅长数论,在强老师的数论课上,小白听着听着又睡着了(毕竟梦里什么都有)。小白梦见自己成为了数论大师,只用了三分钟就熟练地写出了一道拉格朗日反演套多项式逆元和快速数论变换的好题。但是当他醒来一看,他还是对数论的题目一窍不通。现在就有一道简单题摆在小白的面前,聪明的你能帮帮他吗?定义经过函数的一次映射就能回到自身的点为函数的不动点(Fix Point)。换句话说,给定函数 f(x),它的不动点就是所原创 2021-07-25 10:40:43 · 187 阅读 · 0 评论 -
HDU 6958 KD-Graph(带权并查集)
题目链接:KD-GraphProblem DescriptionLet’s call a weighted connected undirected graph of n vertices and m edges KD-Graph, if thefollowing conditions fulfill:n vertices are strictly divided into K groups, each group contains at least one verticeif verti原创 2021-07-31 20:50:05 · 137 阅读 · 0 评论 -
食物链(并查集)
动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。现有 N 个动物,以 1∼N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 N 个动物所构成的食物链关系进行描述:第一种说法是 1 X Y,表示 X 和 Y 是同类。第二种说法是 2 X Y,表示 X 吃 Y。此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句原创 2021-07-29 14:23:47 · 71 阅读 · 0 评论 -
CodeForces - 1352F Binary String Reconstruction (构建)
For some binary string s (i.e. each character si is either ‘0’ or ‘1’), all pairs of consecutive (adjacent) characters were written. In other words, all substrings of length 2 were written. For each pair (substring of length 2), the number of ‘1’ (ones) in原创 2021-07-24 11:49:53 · 127 阅读 · 0 评论 -
石子合并(动态规划)
题目链接:石子合并设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;原创 2021-07-27 17:47:57 · 2356 阅读 · 0 评论 -
动态规划-背包问题
文章目录前言一、01背包朴素解法(二维)空间优化(一维)求方案数求具体方案二、完全背包朴素解法(二维)时间优化空间优化三、多重背包朴素解法二进制优化单调队列优化四、分组背包五、混合背包六、二维费用的背包问题七、有依赖的背包问题前言转载:dd大牛的《背包九讲》这位大佬将常见的背包问题讲的很好,入门背包必看博客。以下是几类常见背包问题的例题一、01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的原创 2021-07-28 17:34:58 · 729 阅读 · 0 评论 -
POJ 2247 Humble Numbers
DescriptionA number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, … shows the first 20 humble numbers.Write a program to find and print the nth eleme原创 2021-07-28 22:12:14 · 170 阅读 · 0 评论 -
动态规划-线性DP
线性DP前言一、数字三角形二、最长上升子序列优化版的最长上升子序列三、最长公共子序列四、最短编辑距离总结前言线性DP,顾名思义就是在线性空间上进行递推以下是一些典型的例题一、数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5输入格式原创 2021-07-27 22:04:32 · 272 阅读 · 0 评论 -
KMP的简单理解
文章目录前言一、得到next数组1.为什么要找最长公共前后缀?2.如何找最长公共前后缀,得到next数组二、得到next数组之后进行匹配总结前言看完很多讲解KMP算法的博客和视频,还是依旧懵懵懂懂,随后我根据代码反推了一遍过程才大致了解了KMP的实现过程。提示:以下是本篇文章正文内容,仅是个人的理解,方便今后的复习。第一次尝试写博客,能力有限,敬请雅正。一、得到next数组我们都知道KMP算法中,难以理解的就是找到next数组,我分为以下两点进行理解。1.为什么要找最长公共前后缀?举一个简原创 2021-07-15 17:31:13 · 258 阅读 · 4 评论 -
Trie树
文章目录前言一、建树存储二、询问查询总结前言Trie树,一种高效的存储和查找字符串集合的数据结构。提示:以下是本篇文章正文内容,根据acwing上y总的讲解整理。刚开始尝试写博客,能力有限,敬请雅正。一、建树存储拿如下字符串举例:abcdefabdefacedbcdfbcffcdaa建树如图所示每一个字符串的结尾处应有标记,表示该字符串已经建好。二、询问查询假设查询如下字符串acedabcfcda绿色路径对应字符串ace原创 2021-07-15 23:53:19 · 121 阅读 · 2 评论 -
离散化与哈希
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、离散化如何算出离散化后的值二、哈希表处理冲突的方式有拉链法和开放寻址法1.拉链法2.开放寻址法3.字符串哈希求字符串前缀的哈希值求任意字串的哈希值证明过程如下:总结前言学完hash哈希散列表后,发现跟离散化很像,但又不同,于是便整理一下离散化跟哈希提示:以下是本篇文章正文内容,根据acwing上y总的讲解进行的整理笔记,便于自己日后复习。能力有限,敬请雅正。一、离散化我们知道,数组所能开的范围有限,当数据的范围原创 2021-07-17 19:40:35 · 1183 阅读 · 0 评论 -
2022CCPC河南省省赛(BCEHIJK)
2022CCPC河南省省赛题解原创 2022-10-06 19:38:52 · 1839 阅读 · 1 评论 -
Codeforces Round #757 (Div. 2) C
文章目录C. Divan and bitwise operationsD1. Divan and Kostomuksha (easy version)D2. Divan and Kostomuksha (hard version)C. Divan and bitwise operations题解:已知区间[l,r][l,r][l,r]OR值xxx,根据或运算可以发现,如果这个xxx值的第iii位是0的话,那么区间[l,r][l,r][l,r]的每一个元素的第iii必定都是0;如果这个xxx值的第iii原创 2021-11-29 18:59:12 · 712 阅读 · 0 评论 -
Codeforces Round #726 (Div. 2) D
题解:首先考虑nnn为奇数的时候如果nnn是质数,先手没法进行操作,先手必输;nnn必然可以拆成两个奇数的乘积假设为p1∗p2p_{1}*p_{2}p1∗p2,不管先手选择p1p_{1}p1还是p2p_{2}p2,后手面对的都是奇数与偶数相乘的局面,只要后手的操作每次都让先手面对两个奇数相乘的局面,那么先手最后必然会面对素数的局面,先手必输其次考虑nnn为偶数的时候如果nnn不是2的幂次方,即n=2t∗k(k为奇数)n=2^t*k(k为奇数)n=2t∗k(k为奇数),先手则面对的是奇数与原创 2021-11-16 12:33:33 · 91 阅读 · 0 评论 -
Codeforces Round #698 (Div. 2) BC
文章目录B. Nezzar and Lucky NumberC. Nezzar and Symmetric ArrayB. Nezzar and Lucky Number题解:假设一个数可以拆成kkk个ddd的和再加上一个余数, 如果余数与kkk中若干个ddd可以组成一个 lucky number,那么说明这个数就是 lucky number还有一点就是,如果这个数大于10倍的ddd,说明这个数就一定是 lucky number 。假设ddd是7,10倍的ddd就是70,那么这个数就可以拆成若干个7原创 2021-11-16 10:40:28 · 273 阅读 · 0 评论 -
1009: 湖南省第十三届大学生计算机程序设计竞赛(HNCPC2017)
题目描述:题解:要想比赛次数尽可能的多,那么就让平局尽可能多,要想让比赛次数尽可能的少,那么就让胜场尽可能多。已知分数,要根据分数来推出进行的比赛场数就得明白分数的分配方法。我们知道胜一场3分,负一场不要得分,平一场两边各的一分。将所有队伍得分加起来,然后找出最高得分,如果最高分大于总分的一半的话,那么这个得分最高的队伍必定不是全部平局;如果最高分不大于总分的一半的话,那么就可以有sum2\frac{sum}{2}2sum场平局。假设所有队伍队伍得分是{5,1,2,4},最高分是5,总分是12原创 2021-11-11 20:51:08 · 720 阅读 · 0 评论 -
Educational Codeforces Round 104 (Rated for Div. 2) B C D
文章目录B. Cat CycleC. Minimum TiesD. Pythagorean TriplesB. Cat Cycle题解:我们通过简单打表发现,没经过n2\frac{n}{2}2n次,AB两只猫就会走到相同的位置,此时B猫就会跳一次, 那么k个小时跳的次数就是kn2\frac{k}{\frac{n}{2}}2nk下取整,则最后B猫就相当于走了k+kn2k+\frac{k}{\frac{n}{2}}k+2nk次,然后对n进行取余便是最后答案。这里可以先将k–,便于取模操作,最后原创 2021-11-11 19:49:06 · 608 阅读 · 0 评论 -
2021CCPC河南省省赛
文章目录1001 收集金币1005 闯关游戏1010 小凯的书架1001 收集金币题目链接//dp[i][0]表示前i个事件都没有选择使用技能//dp[i][1]表示前i个事件已经选择使用技能了int dp[N][2];void solve(){ memset(dp, 0, sizeof dp); int n; cin >> n; for (int i = 1; i <= n; i ++ ) { string op; int v原创 2021-11-04 19:11:17 · 3758 阅读 · 0 评论 -
2020年河南省CCPC大学生程序设计竞赛 太阳轰炸(二项分布)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分原创 2021-10-31 09:49:44 · 405 阅读 · 0 评论 -
HDU - 3746(字符串最小循环节)
题目链接:Cyclic Nacklace题目大意:给定一个字符串,只能在该字符串最左端和最右端增加字符,最少增加多少个字符可以使得该字符串可以由其中一个字串循环得到思路:题目既然要求最后得到的字符串可以由其字串循环得到,而且只能在左边和右边增加字符,很明显就是字符串的最小循环节问题首先利用KMP算法求得原字符串的next数组因为i - next[i]为以第i个字符结尾的字符串的最小循环节长度假定题目给定的字符串长度为n, 那么该字符串的最小循环节长度 k = n - next[n]我们对最小原创 2021-10-27 11:09:45 · 632 阅读 · 0 评论 -
AtCoder Regular Contest 128 (AB)
A - Gold and Silver官方题解简直yyds 官方题解但是官方题解的代码不是C++,还是附上C++代码吧int a[N], ans[N];int main(){ IOS; int n; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 1; i++) { //这里的异或运原创 2021-10-18 21:48:29 · 690 阅读 · 0 评论 -
2021CCPC网络赛(重赛)Monopoly
官方题解:我用的是外层采用哈希,内层采用map的方式其中有一个点就是一定要把所有的余数都取正,即(x%sum+sum)%sum,因为经过循环不仅可以往上加, 还可以向下减就比如这个样例12 2-1 35-5正确答案应该是7 -1但是如果余数不取正的话,第一个输出的结果就是-1了代码如下:#include <unordered_map>//#include <unordered_set>#include <algorithm>原创 2021-10-16 16:59:20 · 270 阅读 · 0 评论 -
2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛)hdu-7131
题目大意:给定一个序列s,求【前缀是nunhehheh后缀是>=1个a】的子序列个数题目思路:定义dp[i][j]为s序列前i个字符与nunhehheh匹配j个字符的个数预处理出每个i后边有多少个a,用数组suf表示对于每个dp[i][8]成2的suf[i]幂次方重点解释一下为什么是dp[i][8]而不是dp[i][9] --因为前缀是以h结尾,每次匹配到h时我们对答案加上dp[i][8]*2^suf[i] --如果是dp[i][9]的话,会重复加上之前我们计算过原创 2021-10-14 20:29:13 · 305 阅读 · 0 评论 -
AtCoder Beginner Contest 221 E
题意:给定一个序列,问有多少个非空子集满足如下要求:1. 子集元素的个数不少于2。2.,即子集第一个元素不大于最后一个元素。分析:我们知道n个元素有个非空子集。设第一个元素为最后一个元素为,这两个元素之间就有个元素。那么以为第一个元素,以为最后一个元素的子集就有个。枚举,最后的答案就是。将这个公式转化一下,每次枚举i的时候,可以先算出,然后在乘上。因为要对区间和做修改,所以用树状数组来存2的幂次方的求和。数据范围太大,但是n的范围在3e5,所以需要离散化.原创 2021-10-05 19:58:44 · 119 阅读 · 0 评论 -
The 2021 ICPC Asia Regionals Online Contest (II) G(泰勒公式展开)
吃了高数没学好的亏啊题解参考大佬博客:大佬博客这是一些常见的泰勒展开式题目:LL gcd(LL a, LL b){ return b ? gcd(b, a % b) : a;}LL a[N], b[N];int main (){ LL n, t; scanf("%lld%lld", &n, &t); for (int i = 1; i <= n; i ++ ) scanf("%lld%lld", &a[i], &b[i]);原创 2021-10-02 17:19:44 · 204 阅读 · 0 评论 -
第二十届蓝桥杯c++ B组 砝码称重
题目链接:砝码称重题解:f[i][j]表示选择前i个砝码总重量为j是否可以得到我们设定砝码放在左边为正,放在右边为负对于枚举到当前这个砝码,我们有三种选择方案:1. 不选。则当前状态与上一个状态方案相同,即f[i][j] = f[i-1][j]2. 选择放在左边。则f[i][j] = f[i-1][j-w[i]]3. 选择放在右边。则f[i][j] = f[i-1][j+w[i]]。因为放在右边为负的,当前状态为j则上一个状态应该为j+w[i]在这里j-w[i]会出现负数原创 2021-09-30 16:34:17 · 1144 阅读 · 0 评论 -
CCPC2019河南省赛 咕咕的计数题 II
题解:参考大佬博客:大佬博客打表容易发现,不小于a * a的数一定满足,剩下小于a * a的数满足的个数可以用等差数列求和来算要求区间[l,r]满足条件的个数,即为区间[1, r]满足的个数减去区间[1, l - 1]满足的个数这里要特别注意边界问题LL a, l, r;LL solve(LL x){ if (x == 0) return 0; LL d = x / a, ans = 0; //d>=a说明r>=a*a; if (d >=原创 2021-09-29 19:53:52 · 91 阅读 · 0 评论 -
2021上海省赛 H. 鸡哥的 AI 驾驶(二分)
题解:将所有汽车按位置排序,对时间进行二分对于不同型号的汽车,如果它们的相对位置发生了改变,那么肯定发生了相撞例如3种不同型号的汽车按位置排序之后是这样的 1 1 2 3 3 1 1前两辆车只能在前两个位置任意移动第3辆车只能在该位置第四第五辆车只能在该两个位置任意移动最后两辆车可以在最后两个位置任意移动如果相对位置发生交换,那么这期间必发生相撞所以对每个时间进行位置更新,然后排序,看相对位置是否发生变化int n, k;struct node { int p, v, t;原创 2021-09-22 20:49:23 · 350 阅读 · 0 评论 -
AtCoder Beginner Contest 219 D - Strange Lunchbox(DP)
题解:题目要求至少x个第一种食物,y个第二种食物的最小方案数dp(i, j, k)表示在前i个餐盒内选,有第一种食物j个,第二种食物k个的最小方案数那么状态转移方程就是dp(i, j, k) = min(dp(i, j, k), dp[max(0, j - p[i].fi)][(max(0, p[i).se] + 1);可以用类似01背包的方法去掉第一维,但是第二重循环和第三重循环就要逆序枚举int dp[500][500];PII p[500];//pair类型int main (){原创 2021-09-21 16:32:01 · 252 阅读 · 0 评论 -
B. Divide Candies (思维)
题目链接:B. Divide Candies题意:给两个整数n,m,问有多少种情况满足(i2 + j2) % m == 0 (1 <= i, j <= n);题解:我们将式子转化一下,变可以得到如下结果(i2 + j2) % m = (i2 %m+ j2%m) %m = ((i % m * i % m) + (j % m * j % m)) % m如此我们就只需要统计余数0~m-1有多少个即可,用cnt数组存储个数然后枚举余数i,j,计算答案int cnt[N];int mai原创 2021-09-15 20:50:40 · 130 阅读 · 0 评论 -
Codeforces Round #742 (Div. 2) BC
B题意:给一个正整数a和一个非负整数b,要求找到最短序列的长度,满足除去序列中所有元素后的最小正整数等于a,所有元素的异或值为b题解:首先这个序列中必定存在0~a-1这a个元素还有这个规律应该不难发现a % 4 == 0时,这a个元素的异或值为0a % 4 == 1时,这a个元素的异或值为a - 1a % 4 == 2时,这a个元素的异或值为1a % 4 == 3时,这a个元素的异或值为a然后我们需要考虑是否再加入元素,使之与之前a个元素的异或值的异或值为b如果我们知道a ^ b =原创 2021-09-06 11:08:27 · 72 阅读 · 0 评论 -
AtCoder Beginner Contest 216 D(构图 + 拓扑排序)
首先感谢大佬博客的题解,拓扑排序yyds!大佬博客题解:对于每一个圆筒内的球,只有上边的拿走之后才能拿走下一个,从上到下连单向边例如1->2->3,1拿走2才能拿,2拿走之后3才能拿对于所有圆筒,最后可以构建一个有向图,如果出现环的话,肯定不能满足题目要求例如1->2->3->1,1拿走2才能拿走,2拿走3才能拿走,3拿走1才能拿走,这就矛盾了对于2n个点,拿n次才能恰好拿完,如果出现环的情况,拓扑排序的答案必定不是n代码如下:int h[N], ne[2 *原创 2021-09-04 15:35:31 · 201 阅读 · 0 评论