Acwing
文章平均质量分 58
Jccober
这个作者很懒,什么都没留下…
展开
-
Acwing 343. 排序 题解(flord+sort)
题目传送门思路:这里n比较小从 0 到 26 ,所以用一般的暴力解法都不会出现问题:大致思路就是:用合适的方式存储输入的不等式,设存入的不等式有m个,用循环依次遍历使用公式 1~m ,用flord 进行传递闭包处理,处理后检查双重循环遍历关系矩阵d ,看是否存在违规情况:如果检测期间出现了矛盾情况即,d[i][j]=1 , d[j][i] =1;则立刻退出检查,并输出用前 t 个不等式会出现矛盾。如果检测期间没有出现矛盾情况,但使用完所有共识后仍有一种情况出现:d[ i ] [ j ] =原创 2021-09-13 08:32:13 · 153 阅读 · 0 评论 -
P1811 最短路 题解(bfs)
题目描述题目链接给定一个包含N个点,M条边的无向图,每条边的边权均为1。再给定K个三元组(A,B,C),表示从A点走到B点后不能往C点走。注意三元组是有序的,如可以从B点走到A点再走到C。现在你要在K个三元组的限制下,找出1号点到N号点的最短路径,并输出任意一条合法路径,会有Check检查你的输出。输入格式输入文件第一行有三个数N,M,K,意义如题目所述。接下来M行每行两个数A,B,表示A,B间有一条边。再下面K行,每行三个数(A,B,C)描述一个三元组。输出格式输出文件共两行数,第一行原创 2021-09-06 14:00:51 · 454 阅读 · 0 评论 -
POJ1456 Supermarket(贪心+小顶堆)
链接:POJ1456思路:贪心策略+小顶堆数据结构思路来源于算法进阶指南,我们的目的是在t的时间内获得更多的利润,该问题可以分解成许多子问题,即每天都卖出商品且保证商品的获利最大。首先将所有商品按照过期时间从小到大排序;初始化一个空的小顶堆。然后遍历所有商品1 : 如果当前商品的过期时间大于堆内商品总数,就将该商品直接插入堆内,然后进行调整,(表示着该商品可能在过期时间之前卖出)。2 : 如果当前商品的过期时间等于堆内商品总数,就将该商品与小顶堆堆顶的节点利润进行比较,如果大于堆顶利润则替换,并向原创 2021-08-20 11:19:07 · 110 阅读 · 0 评论 -
KMP算法总算是搞懂了
KMP算法的两部分字符串匹配的暴力做法:const int maxn=1e6+10;char p[maxn],s[maxn]; //p为原串,s为模板串for(int i=1;i<=m;i++){ bool flag=true; for(int j=1;j<=n;j++){ if(p[i]!=s[j]) flag=false; } if(flag) cout<<i-j+1; //输出匹配成功的串初始位置,p下标为0时不加1,下标1开始时加1;}时间复杂度原创 2021-08-16 18:18:45 · 172 阅读 · 0 评论 -
LeetCode 1049. 最后一块石头的重量 II脑筋急转弯外表下的 01 背包问题
1049. 最后一块石头的重量 II题目链接:传送门问题分析:在解决问题之前,我们可以想一想类似的问题,一堆石头,我们如何去选使得石头的总重量最大,我们顺其自然的想到用 01 背包问题的解法,得到这个问题的结果,现在你些许会发现 01背包问题和这道题的一些联系了,将这些石头分成两半,一半用 01背包问题的解法,得到这一半石头的重量最大值,最后的结果就是,剩下的石头重量减去得到动态规划得到的重量最大值。因为动态规划的到的重量一定不超过石头重量的一半,所以剩下的石头数量一定大于等于动态规划得到的重量,原创 2021-04-07 22:21:54 · 124 阅读 · 0 评论 -
双指针算法实现数组去重
双指针实现数组去重但保留k个相同元素题目链接:leetcode传送门原题目是最多保留2个相同的元素,这里我们扩展一下,最多保留k个相同的元素。思路:一直数组是有序的,单调递增我们可以先将前k个元素保留,因为前k个元素不管重不重复这是一定存在的。(数组下标从0开始,保留0~k-1所有元素)然后用 i 从第k个开始向后遍历,用一个变量 j 从第一个元素开始遍历,如果第 i 个与 j 元素不相等,就把第 i 个元素赋值在k的位置,j++ ,i++ , k++,否则 i 继续向后遍历,j 不变Code原创 2021-04-06 11:41:07 · 687 阅读 · 0 评论 -
Acwing 刷题-递增三元组(经典枚举)-爆int了呜呜
递增三元组给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k) 满足:1≤i,j,k≤NAi<Bj<Ck输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,…AN。第三行包含 N 个整数 B1,B2,…BN。第四行包含 N 个整数 C1,C2,…CN。输出格式一个整数表示答案。数据范围1≤N≤10^5,0≤Ai,Bi,Ci≤10^5输入样例:31 1 1原创 2021-03-21 15:50:53 · 183 阅读 · 0 评论 -
01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题
01背包问题:01背包问题的特点:背包容量有限,物品只有一个,具有确定的体积和价值,我们的目标就是在不超过背包最大体积的情况下装入价值尽可能大的物品,让我们输出最大总价值对于背包问题我们可以采用类似的思考方式:以此为:状态表示 考虑所有不同情况的结果存储方式用集合表示背包问题的所有不同选法 f [ i ][ j ] 表示从0 ~ i 这些物品中选,最大背包容量为 j 的最大价值然后考虑集合选法的条件, 数量 i 小于等于 物品总数 , 体积 j 小于等于 背包最大体积 V至于背包问题的属原创 2021-03-16 16:17:45 · 1719 阅读 · 0 评论 -
Acwing 1230. K倍区间
1230. K倍区间给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6难度:中等时/空限制:1s原创 2021-03-03 19:37:15 · 200 阅读 · 1 评论