![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AcWing
岁忧
(目前更新LeetCode每日一题ing)记录一些平时做的题目,写些小小的心得。
展开
-
AcWing算法基础课——第五讲 动态规划 之 背包问题
题目:2. 01背包问题题解:#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;typedef long long LL;const int N=1e4+10;const int mod=1e9;int f[1010];int main(){ int n,m; cin>>n>原创 2022-05-24 18:41:50 · 368 阅读 · 0 评论 -
AcWing 2048. 干草(贪心)
题目:2048. 干草题解:就计算avg,然后当a[i]>avg,ans+=a[i]-avg,最后输出ans即可#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;typedef long long LL;const int N=1e4+10;const int mod=1e9;int main(){原创 2022-05-12 21:04:55 · 171 阅读 · 0 评论 -
AcWing 2057. 比赛时间(模拟)
题目:2057. 比赛时间题解:算出开始时间t1的分钟数,然后算出结束时间的分钟数,两者之差即为所求。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;typedef long long LL;const int N=1e6+10;const int mod=1e9;int main(){ int原创 2022-05-12 20:56:35 · 123 阅读 · 0 评论 -
AcWing 1968. 奶牛赛跑 (模拟)
题目:1968. 奶牛赛跑题解:记录下每秒两个人所在的位置。最后开始遍历一遍时间,用flag来标记谁在前,当fa[i]与fb[i]不同的时候才可能产生超越现象,但这时也需要结合flag来判断,避免产生“a快- -》a与b一样- -》a再次快”这种现象。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;typedef原创 2022-05-11 08:34:44 · 212 阅读 · 0 评论 -
AcWing 1977. 信息中继 (并查集||暴力遍历)
题目:1977. 信息中继方法一:并查集。我们将可以互相联系的奶牛用并查集合并在一起,做完这些操作后。循环遍历一遍,看看最后合并在一起的奶牛里最后一头奶牛是否还可以联系别的奶牛(也就是输入f[i]是0的话,这一队奶牛不会陷入循环)#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;typedef long long原创 2022-05-11 08:10:21 · 164 阅读 · 0 评论 -
AcWing 1995. 见面与问候(模拟)
题目:1995. 见面与问候题解:因为移动单位不会超过1e^6,所以可以直接模拟遍历。记录下每个时刻两个人所在的位置。然后再遍历一遍,当同一时间所在位置相同,且运动方向不同就可以sum++;上图来源注意如果两个人不是同是停下,那么就是看停下的那个人后面会不会还和另外一个没停的人相遇。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,in原创 2022-05-10 21:46:17 · 150 阅读 · 0 评论 -
AcWing2003. 找到牛(前缀和)
题目:2003. 找到牛!题解:我们将每一个连续两个‘(’的位置标记为1(我选的是右边的’(‘的下标a[i])。然后再将每一个连续两个‘)’的位置标记为1(我选的是右边的’)'的下标b[i]),接着对b数组求前缀和。最后遍历每个位置,sum+=a[i]*(b[len]-b[i]).说白了就是看’((‘的右边有多少个’))’#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typed原创 2022-05-10 21:19:47 · 158 阅读 · 0 评论 -
AcWing1351. 密码锁(容斥原理)
题目:1351. 密码锁题解:当n<=5时,所以方案都行,输出n^3即可。当N>5时,555+555-两者公共的。两者公共的就是看:第一位里面公共的数✖第二位里面公共的数✖第三位里面公共的数。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int原创 2022-04-24 21:36:48 · 158 阅读 · 0 评论 -
AcWing 2060. 奶牛选美(bfs+dfs)
题目:2060. 奶牛选美题解:dfs分别找到两块区域,并且用1、2标记他们,然后从第一块区域开始bfs,将所有非第一块区域的点(且向外走一步的距离)放进队列q里。最后再对队列q里的点进行dfs,第一个出现的标记为2的点时,输出其dis即可。注意:bfs里的标记最好插入到队列的时候就标记。当然还是得看需求,比如优先队列的时候就不是这样。所以以后用bfs的时候要注意插入与标记的顺序!!!#include<bits/stdc++.h>#define x first#define y s原创 2022-04-26 12:24:28 · 440 阅读 · 0 评论 -
AcWing 2041. 干草堆(一维差分)
题目:2041. 干草堆题解:典型的一维差分题型#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;const int N=1e6+10;const int mod=1e9;int a[N];int main(){ int n,k; cin>>n>>k; for原创 2022-04-26 11:04:45 · 230 阅读 · 0 评论 -
AcWing 2058. 笨拙的手指(枚举+进制+集合set)
题目:2058. 笨拙的手指题解:我们先在二进制中枚举并修改所有可能的一位,然后存入set,然后再枚举并修改三进制的每一位,然后将可能的值在set里找一遍,如果set里有,输出就可。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef pair<int ,int > PII;const int N=1e5+10;const int mod=1e9;in原创 2022-04-26 10:58:17 · 254 阅读 · 0 评论 -
AcWing 1353. 滑雪场设计(枚举)
题目:1353. 滑雪场设计题解:把高度差为17的长度枚举一遍,然后找出最小的即可。时间复杂度最大为0(10^6)。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;unordered原创 2022-04-24 21:36:10 · 176 阅读 · 0 评论 -
AcWing1944. 记录保存(哈希表)
题目:1944. 记录保存题解:先对名字字符串进行排序,然后再在中间加入空格形成一个新的字符串s,然后用map记录每个字符串出现的次数。一定要加空格!!!避免名字不同,但连一起相同。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;c原创 2022-04-24 21:36:18 · 152 阅读 · 0 评论 -
AcWing 1874. 哞加密(枚举)
题目:1874. 哞加密题解:从a[i][j]出发,把每个方向都试一遍。然后用map记录符合条件的组合及次数。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;char a[55][5原创 2022-04-24 21:36:56 · 156 阅读 · 0 评论 -
AcWing 1883. 删减(模拟)
题目:1883. 删减题解:每当e.size()>=t.size(),就让e的后面t.size()个字符和t来比对即可。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int原创 2022-04-24 21:37:03 · 130 阅读 · 0 评论 -
AcWing 1892. 奶牛线路(枚举+模拟)
题目:1892. 奶牛线路题解:枚举。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int main(){ int a,b,n; cin>>a>原创 2022-04-24 21:37:10 · 197 阅读 · 0 评论 -
AcWing 1902. 马拉松(枚举)
题目:1902. 马拉松题解:先记录下按正常顺序需要走多远sum,然后枚举跳过中间点后,需要的距离。求出最小的就可。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int main原创 2022-04-24 21:37:21 · 160 阅读 · 0 评论 -
AcWing 1824. 钻石收藏家(双指针)
题目:1824. 钻石收藏家题解:典型的一道双指针题目。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int main(){ int n,k; cin>原创 2022-04-24 21:37:55 · 184 阅读 · 0 评论 -
AcWing 1842. 牛奶桶(枚举||dp完全背包问题)
题目:1842. 牛奶桶题解一:dp,完全背包问题。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int dp[1010];int main(){ int x[2]原创 2022-04-24 21:38:03 · 263 阅读 · 0 评论 -
AcWing 1854. 晋升计数(模拟)
题目:1854. 晋升计数题解:重后往前推#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int main(){ int a[5][5]; for(int i原创 2022-04-21 14:22:24 · 147 阅读 · 0 评论 -
AcWing 1866. 围栏刷漆(区间求交)
题目:1866. 围栏刷漆题解:先加上两个区间的长度,然后再减去两个区间相交的长度#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int main(){ int a,原创 2022-04-21 14:10:49 · 171 阅读 · 0 评论 -
AcWing 1775. 丢失的牛 (模拟)
题目:1775. 丢失的牛题解:只要y在last和next之间就可以结束了。然后注意的是最后一次加的是sum+=abs(y-last)。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=1000000原创 2022-04-21 13:52:13 · 106 阅读 · 0 评论 -
AcWing 1788. 牛为什么过马路(模拟)
题目:1788. 牛为什么过马路题解:用-1表示还没有观测过,然后当a[id]!=-1时,就判断a[id]与t是否不同,不同ans++,最后赋值a[id]=t#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int原创 2022-04-21 13:42:18 · 130 阅读 · 0 评论 -
AcWing1800. 不做最后一个(枚举)
题目:1800. 不做最后一个!题解:先用map记录下每只牛的产奶量,然后再读出mp中的键值对到PII里,然后排序。找到第二小的位置,不存在or第二小的位置后面一个位置值和它一样,则输出Tie。否则输出对应的牛名字即可。#include<bits/stdc++.h>#define x first`在这里插入代码片`#define y secondusing namespace std;typedef long long LL;typedef pair<int ,strin原创 2022-04-21 13:35:56 · 146 阅读 · 0 评论 -
AcWing 1812. 方形牧场(枚举)
题目:1812. 方形牧场题解:将这两个矩形分别映射到x轴和y轴上,找出最大区间,然后让这两个区间的长度相乘即可。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int main(原创 2022-04-21 13:19:55 · 138 阅读 · 0 评论 -
AcWing 1725. 组队井字游戏(枚举)
题目:1725. 组队井字游戏题解:枚举每一种情况。然后用set来解决重复的问题。一维set用来解决字符重复的问题。二维set用来解决满足要求的组合里重复的问题。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int m原创 2022-04-21 09:15:05 · 2611 阅读 · 0 评论 -
AcWing 1737. 传送(分类讨论)
题目:1737. 传送题解:有三种方法。第一种:直接从a到b;第二种:从a到c,再从d到b;第三种:从a到d,再从c到b#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int mai原创 2022-04-21 09:00:41 · 98 阅读 · 0 评论 -
AcWing 1749. 阻挡广告牌 II(分类讨论+枚举)
题目:1749. 阻挡广告牌 II题解:最后没被遮盖住的部分,分别投影到x轴和y轴上的长度,相乘就是答案。等价于在没遮盖的部分找到x轴上的最大、小值。y轴也是如此。两者相乘即可。注意都被遮盖住的话,就找不到最大小值,所以就要记得和0比较#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int>原创 2022-04-21 08:51:57 · 140 阅读 · 0 评论 -
AcWing 1761. 阻挡广告牌 (计算几何,两个矩形的交集)
题目:1761. 阻挡广告牌题解一:暴力遍历。先对前两个广告牌内的点都置为1,然后将第三个广告牌内的点置为0,最后再遍历一遍前两个广告牌内的点,看看有多少个1。时间复杂度为o(n^2)。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;原创 2022-04-21 08:26:57 · 209 阅读 · 0 评论 -
AcWing 1470. 水桶传递队列(分类讨论 || bfs)
题目:1470. 水桶传递队列题解:这道题比较特别,其实分类讨论就可以做出来,但也可以用bfs。分类讨论要注意的是R在B与L中间的情况。解法一:分类讨论#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=1原创 2022-04-20 23:28:48 · 234 阅读 · 0 评论 -
AcWing 1683. 困牛放牧 (贪心+分类讨论)
题目:1683. 困牛放牧题解:先升序排序。最大次数,其实就是看相邻的两点最大距离-1;最小次数就得分类讨论了:如果三个数连续,则为0;如果有相邻的两个数直接的差为2,则为1;否则都为2。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10原创 2022-04-20 22:59:35 · 214 阅读 · 0 评论 -
AcWing 1659. 社交距离 I GOOD(贪心+分类讨论)
题目: 1659. 社交距离 I题解:分成两类讨论:一类是一段连续的0里放两头牛; 另一类:一段连续的0只放一头牛下面这个先不讨论有一段连续的0在最开始和最末尾的情况。第一类:在a[i]~a[i+1]放两只牛,设最大距离为d ,即满足:a[i]+d+d+d<=a[i+1],也就是d=(a[i]-a[i-1])/3向下取整第二类:在a[i]~a[i+1]放一只牛,设最大距离为d ,即满足:a[i]+d+d<=a[i+1],也就是d=(a[i]-a[i-1])/2向下取整。但在这里我们要原创 2022-04-20 22:51:41 · 166 阅读 · 0 评论 -
AcWing 1695. 果壳游戏(模拟)
题目:1695. 果壳游戏题解:a[i]用于记录当前在第i个位置放置的是标号为a[i]的坚果壳。cnt[i]记录的是当前标号为i的坚果壳被选了cnt[i]次。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod原创 2022-04-20 00:38:26 · 2978 阅读 · 0 评论 -
AcWing 1714. 混合牛奶 (枚举)
题目:1714. 混合牛奶#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int n;int main(){ int c[5],m[5]; for(int i=0;i原创 2022-04-20 00:38:34 · 195 阅读 · 0 评论 -
AcWing 1671. 三角形 (枚举)
题目:1671. 三角形题解:0(n^3),由于n最大为100,所以直接暴力枚举即可#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,int> PII;const int N=1e5+10;const int mod=100000007;int n;int main(){ ci原创 2022-04-20 00:38:41 · 98 阅读 · 0 评论 -
AcWing 1442. 单词处理器(模拟)
题目:1442. 单词处理器#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int n,k;int main(){ cin>>n>>k;原创 2022-04-20 00:38:49 · 88 阅读 · 0 评论 -
AcWing 1459. 奶牛体操 (枚举)
题目:1459. 奶牛体操题解一:a[i][j]表示i在j的前面出现的次数。最后枚举a[i][j]==k时,就满足一对#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e5+10;const int mod=100000007;int n原创 2022-04-20 00:38:59 · 144 阅读 · 0 评论 -
AcWing 3745. 牛的学术圈 I(贪心)
题目:3745. 牛的学术圈 I题解:先对引用量计数,cnt[i]:表示引用量为i的文章有多少篇。然后对引用量从0~100000遍历一遍,找到不符合要求的最小引用量l=i,(大于引用量i的文章篇数小于i)。这时我们把L个分配名额给到引用量离l=i最近且小于l=i的文章,然后再重复前面的遍历操作即可。#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long原创 2022-04-20 00:39:06 · 174 阅读 · 0 评论 -
AcWing 3370. 牛年(哈希表)
题目:3370. 牛年题解:第一行的最后一个单词一定是Bessie,然后我们用mp[“Bessie”]=0记下她的年龄为0,然后求出其余牛的相对年龄。Bessie是牛年出生的,然后其余牛i基于她得到的相对年龄对12取模的位置s[(mp[i]%12+12)%12]就是其生肖#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pa原创 2022-04-19 15:38:17 · 115 阅读 · 0 评论 -
AcWing 3358. 放养但没有完全放养(贪心)
题目:3358. 放养但没有完全放养题解:先记录下每个字母在第几位,然后对字符串中相邻字母在字母表的位置进行判断,如果是升序的不用ct++,否则要#include<bits/stdc++.h>#define x first#define y secondusing namespace std;typedef long long LL;typedef pair<int ,string> PII;const int N=1e4;const int mod=10000原创 2022-04-19 15:16:04 · 161 阅读 · 0 评论