![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AcWing刷题打卡
文章平均质量分 57
MingDexterous
这个作者很懒,什么都没留下…
展开
-
AcWing 打卡记录day 7
108. 奇数码问题因为之前ysj写九宫格的时候就说过这个事情,怎么判断是否有解。是根据逆序对来求。不过九宫格的答案是固定的,这个题目的结束态是他给你的。这里就涉及了一个结论。因为n一定是个奇数。所以你向上或者向下移动,相当于在一个一维数组中,前进或者后退了n-1位。n-1一定是个偶数,假设你这n-1个数中, 有a个比你大,b个比你小。a+b=n-1 ,即a+b是偶数。假如你后退n-1位,那么你一开始对这个区间逆序对的影响是a,后退完后对这个区间的影响是b。那么你对整个数组的影响就是 b-a,原创 2021-10-17 16:18:26 · 113 阅读 · 0 评论 -
AcWing 打卡记录day 6
106. 动态中位数题意就是题目。因为题目要求只在数字个数为奇数的时候才输出。所以其实可以根据 这个 中位数, 将左右分成两个部分, 然后下一个数进来的时候,通过判断,选择将其放在哪一边。因为你将数放进两边的时候,还需要排序,所以这里用优先队列。因为是取到队头,所以小于中位数那边用降序,大于的那边用升序。然后模拟一下 下一个数放进来的情况即可将所有情况列出来,然后判断怎么交换两个队列里面的数。 并且输出的就是降序队列里的对头即可。#include <bits/stdc++.h>usi原创 2021-10-17 15:18:19 · 108 阅读 · 0 评论 -
AcWing 打卡记录day 5
102. 最佳牛围栏是一个二分的题目,但是check函数很难想。因为是浮点型,所以二分格式中就不需要-1了。题目要求的是最大的平均值。那么我们就二分来求平均值。传进去的参数mid 是我们假定的平均值。然后计算每个数对这个平均值的影响。然后通过前缀和,快速得到某一段区间对这个平均值的收益。如果这个区间大于等于m并且收益大于0。就说明这个不是最大的平均值。现在的问题是怎么确定这个区间。我们用一个数,来存前面的k个数对平均值收益最小的值。因为如果这个区间加上后面的那个数之后,如果后面那个数比平原创 2021-10-17 14:56:19 · 89 阅读 · 0 评论 -
AcWing打卡记录 day4
99.激光炸弹是一个二维前缀和,主要运用到的就是 pre[i][j]+=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1];pre[i][j]表示的是二维上的数组的值的和。所以pre[i-1][j]+pre[i][j-1]就会有一个重复的部分pre[i-1][j-1];所以就得减去。得到其值。而在后面得到一个r*r的区域的值的时候也是一样的, ans=max(ans,pre[i][j]-pre[i-r][j]-pre[i][j-r]+pre[i-r][j-r]);原创 2021-10-11 22:03:46 · 89 阅读 · 0 评论 -
AcWing打卡记录day 3
AcWing 96. 奇怪的汉诺塔和一般的汉诺塔不同,这个有四个塔。在三塔的时候,我们可以理解成,我们放n个圆盘的时候,是先将n-1个圆盘转移到B盘,然后将第n个转移到C盘,再将n-1个圆盘转移回来。所以状态转移是f[i]=f[i-1]*2+1;//整体移动两次(i-1)个圆盘 然后加上移动一次第n个圆盘。当我们四塔的时候,和三塔类似。因为三塔只有3个塔,在前面n-1个圆盘占据了一个塔之后,相当于只剩下两个塔给他转移了。所以只能最后一个圆盘转移。但是四塔的时候,将n-1个圆盘转移到一个塔原创 2021-10-08 00:02:37 · 177 阅读 · 0 评论 -
AcWing打卡记录day 2
93. 递归实现组合型枚举简单递归。因为要从字典序从小到大排序。// Problem: 递归实现组合型枚举// Contest: AcWing// URL: https://www.acwing.com/problem/content/95/// Memory Limit: 256 MB// Time Limit: 5000 ms// Date:2021-10-06 09:51:47//// Powered by CP Editor (https://cpeditor.org)#inc原创 2021-10-07 00:10:19 · 152 阅读 · 0 评论 -
AcWing打卡记录day 1
89 和 90都是快速幂的题目。89是快速幂板子。90是运用到了位运算,二进制,当a * b要大于long long 类型的话,因为要模p则可以,将b转换成二进制的数,然后一位一位的运算。ll ksm(ll a,ll b,ll p){ ll ans=0; while(b){ if(b&1) ans=(ans+a)%p; a=(2*a)%p;//因为是二进制,所以每次都是乘2 b>>=1; } return ans;}91是一个简单的状压dp的题目。即用.原创 2021-10-06 09:46:55 · 116 阅读 · 0 评论