
acwing
冲鸭szg
这个作者很懒,什么都没留下…
展开
-
acwing3784交换相邻元素CF920C
原题链接 来源CF920C 来自y总的题解 根据题目,每个区间的内部都可以互相排序,不在同一片区间的数字就不能够交换。 在一个连续区间中判断是否有序可以判断最大值是不是这个区间的最大下标,(以及最小值是不是这个区间的最小下标,但是因为题目区间的连续性保证了只要是前面的区间满足即当前这段的最小值就应该是最小下标+1) 然后当出现一个区间不满足的时候,直接输出-1结束即可。 #include <bits/stdc++.h> using namespace std; typedef long lo原创 2021-08-05 17:58:04 · 176 阅读 · 0 评论 -
acwing3777砖块 CF1271B
原题链接 来源:CF1271B 最初看到答案不唯一,就知道可以暴力去做,最初就打算锁定第一个颜色,根据地一个颜色来确定整行砖块的最终颜色,然后不断地向后比较,遇到不同的就和后面的一起反转,直到最后检查是否相同。 在推样例检查BUG的时候,发现这样不严谨,因为有可能如果不能够让其全部变成黑色,也有可能全部变成白色,后来发现了当最初的颜色个数为偶数时,可以设定为整行的最终颜色,如果最初的颜色个数为奇数,则不可能实现整行全部为该颜色。 所以选择两种颜色都尝试一边,如果都不行就输出-1 代码看了闫总的,觉得很好看原创 2021-07-30 23:37:55 · 277 阅读 · 0 评论 -
acwing3776水果拼盘 CF1271A
原题链接 来源:CF1271A 简单贪心,因为在本题两个拼盘都用到的香蕉数目相同,可以直接贪心做,就是让利润多的拼盘尽可能生产。不然就要用到DP了 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=2e5+5; const int inf=0x3f3f3f3f; int a[maxn]; int main()原创 2021-07-29 22:58:06 · 189 阅读 · 0 评论 -
acwing3775数组补全 CF1283C
原题链接 来源: CF1283C 学到了很多。 构造模拟题。 一看方案不唯一,就想要找一种极端情况,就想到了把所有缺失的数字逆向放置到缺少的位置上,保证一定不相等( f[ i ] != i).类似双指针前后遍历。 如果出现了相等的情况,即奇数个缺失时,让中间的那个和他后面的位置上的数字互换就行了,注意要取模,实现抽象意义上的圆环,防止后面没有位置了。 然后就时统计缺失的数字,使用了set的erase函数,方便统计,使用了指针iterator遍历set集合。 闫总建立的图环模型。。。。。emmm没怎么认真听原创 2021-07-28 22:58:56 · 240 阅读 · 0 评论 -
acwing3774 亮灯时长 CF1000B
原题链接 来源:CF1000B 看的题解,一开始以为等价转化为使其中的一个时间点失效,后来发现该思路不对。 最后总结一下大体思路: 在 ai 和 ai+1 两个时刻之间加入一次操作,那么实际上不会影响 a0 到 ai 之间的亮灯情况 我们加入了一个翻转时间点之后,ai+1后面所有的灭灯时间长度和亮灯的时间长度互相交换。我们创建两个数组分别记录改变前的亮灯时间和灭灯时间,然后利用前缀和来计算所需时间,在中间的 ai 和ai+1 区间中,争取加了改变点之后,让亮灯时间变得最大,所以亮灯时间为 ai+1 - a原创 2021-07-27 18:33:04 · 226 阅读 · 0 评论 -
acwing3773 兔子跳 CF1307B
题目来源 来源:CF1307B 贪心来做这道题 首先求出最大值MAX,然后一直用最大值来向前跳,当遇到再跳就跳过了的时候,即还剩不到MAX的距离时,就撤回上次跳的路程,然后剩下的距离介于MAX到2MAX之间,然后跳一个等腰三角形到达终点。 注意一些细节,比如当正好满足距离的时候要直接输出。 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int>pii; c原创 2021-07-27 12:10:38 · 172 阅读 · 0 评论 -
acwing3769移动石子 CF1307A
题目来源 来源:CF1307A 简单贪心模拟题。 以贪心的方式尽可能多的将较近的石子挪动到 1号箱子之中。 每次判断一个箱子如果其中的所有箱子都能够移入就更新信息,否则就能移入多少就移入多少,通过相除来判断能够移入多少。 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=105; const int inf=0x原创 2021-07-23 10:12:34 · 190 阅读 · 0 评论 -
acwing3768 字符串删减 CF978B
原题链接 来源:CF978B 本题很简单,就是直接模拟一次就行了 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int>pii; const int maxn=105; const int inf=0x3f3f3f3f; int main() { int n; string s; int cnt=0; int ans=0;原创 2021-07-23 09:37:12 · 183 阅读 · 0 评论 -
acwing3767最小的值 CF1321A
原题链接 来源:CF1321A 构造题,在理解了题目之后,开始分类讨论 分别记录a[i]>b[i] 和 a[i]<b[i]的数目,分别记为one,two。 因为需要尽可能地小,然后ab相等的时候,新的数组p[i]就为最小的正整数1,这样才会不会干涉到答案。 考虑one当one为0的时候,two为0时则会导致a数组和b数组一定相等,不符合题目输出-1,当two不是1,那就更加的不符合条件了,此时b数组会一定大于a数组,而题目要求的是a数组大于b数组。总之,one为0时输出-1。 然后题目就转化为原创 2021-07-22 08:32:01 · 126 阅读 · 0 评论 -
Acwing 每日一题(暑假)
acwing3761 唯一最小数 考察unordered_map容器的使用 acwing3762 二进制矩阵 首先要找到规律,然后分情况讨论。思维题 acwing3763 数字矩阵 和上一个题解决思路一样,先找规律 acwing3764 acwing3765 acwing3766原创 2021-07-19 23:13:47 · 237 阅读 · 0 评论 -
acwing3763 数字矩阵
原题链接 来源CF1447B 本题和上一个题目思路差不多,上来先找规律,本题规律在于负数就像一个带电的电子,可以和他相邻的电子相互传接触时,当他接触的电子也带电(负数)时,可以相互抵消两者都不带点就是变成正数;当他接触的电子不带电(正数)时,会将电传播给该电子,该电子就带了电变成了负数,原电子就不带电了。 因此如果没有另一个符号抵消,这个负号可以传播到任何一个角落,当一定会剩下一个负号时,就让他和绝对值最小的数结合在一起,能够对答案造成的影响最小化。如果都相互抵消掉最好啦,这样全是正数,结果一定最大啦。原创 2021-07-19 23:10:17 · 165 阅读 · 0 评论 -
acwing3762 二进制矩阵
原题链接 来自CF1440C1 一般在CF的题目中,出现了“所需的操作不能超过几倍的n*m”,“答案一定存在”,“答案不唯一”,等字眼,可以考虑就是找规律然后卡着最大的操作数AC。 y总在视频中讲到,对于一个需要转化为0的点,我们可以通过三步操作在实现转化的基础上还不影响其他的点。 在一个2X2的矩阵中,我们一共可以进行四种不同的操作: 每种颜色代表一个操作,发现任取三种操作都可以实现 “在四个格子中只改变一个格子的颜色而不改变其他格子颜色” 因为改变颜色那个格子被改变了三次,而其它三个各自只改变了一次原创 2021-07-19 22:58:10 · 207 阅读 · 0 评论 -
acwing3761 唯一最小数
原题链接 来自CF1454B 这个题在读题之后可以想到是考的map容器。 但是在实现过程中发现频繁的使用了查找的功能,故将其改为unordered_map容器,当然map也是可以AC的。 该容器和map容器不同之处在于map内部实现了红黑树,而unordered_map实现了哈希表(也称为散列表,特别适合查找) 两种容器的使用方法几乎相同。unordered_map的key为整数数组的值,value为一个pair对,pair的first值为这个数在数组中已经出现的次数,second值记录其下标,便于答案最原创 2021-07-19 22:38:58 · 186 阅读 · 0 评论