Acwing题解
Acwing题解备忘录
i_meteor_shower
这个作者很懒,什么都没留下…
展开
-
Acwing #796(子矩阵的和)
扩展到二维的前缀和问题。求由对角点为(x1, y1)、(x2,y2)构成的矩形中的点的和即sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1]#include <iostream>using namespace std;const int MAXN = 1005;int value[MAXN][MAXN];...原创 2020-02-03 20:06:52 · 200 阅读 · 0 评论 -
Acwing #795(前缀和)
可用一个sum数组保存value(保存输入数据)数组的前缀和。sum[i]表示前i个数值得和。即sum[i] = sum[i-1] + value[i] 求l到r区间得值只需要让sum[r] - sum[l-1],得出的结果即是答案。#include <iostream>using namespace std;const int M...原创 2020-02-03 17:34:25 · 434 阅读 · 0 评论 -
Acwing #794(高精度除法)
模拟除法过程#include <iostream>#include <algorithm>#include <vector>using namespace std;//除法vector<int> div(vector<int> &A, int b, int &r) { //r表示余数 vector...原创 2020-02-03 15:36:37 · 241 阅读 · 0 评论 -
Acwing #793(高精度乘法)
#include <iostream>#include <vector>#include <string>using namespace std;vector<int> mul(vector<int> &A, int b) { vector<int> C; //结果数组 //t保存进位 ...原创 2020-02-03 15:26:40 · 141 阅读 · 0 评论 -
Acwing #792(高精度减法)
模拟减法,但首先应判断A,B的大小#include <iostream>#include <string>#include <vector>using namespace std;//减法,保证A>=Bvector<int> sub(vector<int> &A, vector<int> &B...原创 2020-02-03 15:18:40 · 208 阅读 · 0 评论 -
Acwing #791(高精度加法)
用数组模拟加法运算即可。#include <iostream>#include <string>#include <vector>using namespace std;//加法vector<int> add(vector<int> &A, vector<int> &B) { vect...原创 2020-02-03 14:54:48 · 209 阅读 · 0 评论 -
Acwing #790(数的三次方根)
二分试探搜索即可#include <iostream>#include <cstdio>using namespace std;int main() { double n; cin >> n; //二分搜索n的三次方根(-|n|~|n|); double l = -10000.0, r = 10000.0; whi...原创 2020-02-03 14:34:12 · 148 阅读 · 0 评论 -
Acwing #789(数的范围)
1.解法一思路:因为数组为升序排列,所以只需要知道k的起始位置和个数,即可知道k的终止位置(起始为值 + 个数 - 1)。#include <iostream>using namespace std;const int MAXN = 100005;typedef pair<int, int> PII;int value[MAXN];//cnt[i]表示值为...原创 2020-02-03 14:25:14 · 190 阅读 · 0 评论 -
Acwing #788(逆序对的数量)
#include <iostream>using namespace std;const int MAXN = 100005;typedef long long LL;int value[MAXN];int temp[MAXN];LL res; //保存答案,全局变量默认为0void merge_short(int l, int r) { if(l >= r...原创 2020-02-03 13:55:50 · 106 阅读 · 0 评论 -
Acwing #787(归并排序)
归并排序步骤: 1.确定分界点(按照中间位置分为两段) 2.递归处理两段区间 3.合并两段处理后有序区间(归并)#include <iostream>using namespace std;const int MAXN = 100005;int value[MAXN];int temp[MAXN]; ...原创 2020-02-03 13:36:37 · 198 阅读 · 0 评论 -
Acwing #786(第K个数)
解题思路:将数组从小到大排序后,输出第k-1个数字即是第k小的数字。快排链接 https://blog.csdn.net/i_meteor_shower/article/details/104153915#include <iostream>#include <algorithm>using namespace std;const int MAXN = 100...原创 2020-02-03 13:23:54 · 147 阅读 · 0 评论 -
Acwing #785(快速排序)
待学会如何做动画演示时,执行过程的动画演示快排步骤: 1.确定分界点(可选用中间位置值或者随机位置) 2.调整区间使分界点左侧值不大于分界点值,分界点右侧值不小于分界点值(使用双指针) 3.递归处理分界点左右两侧区间#include <iostream>#include <algorithm>...原创 2020-02-03 11:26:32 · 134 阅读 · 0 评论 -
Acwing #51(数字排列)
点击跳转题目bool next_permutation(begin, end);对数组按照字典序升序排列一次,如原数组是最大字典序,则返回false。class Solution {public: vector<vector<int>> permutation(vector<int>& nums) { vector&...原创 2019-09-17 23:01:08 · 116 阅读 · 0 评论 -
Acwing #3(完全背包问题)
点击打开题目链接完全背包于01背包类似,但是物品可以取无限次。此题也可用dp[j]表示体积为 j 时最大价值,同时只需将01背包中的 j = V…0改为j = 0…V即可。对于01背包中从V…0循环是为了保证该值都是由前一个物品的值转移过来,从而保证了第i件物品只取了一次,而完全背包可以取无限次(只要背包容量容许),所以在求第i件物品的dp时,状态转移也可从第i件物品转移过来。即:j:...原创 2019-09-11 21:04:51 · 170 阅读 · 0 评论 -
Acwing #2(01背包问题)
点击跳转题目背包问题大致解决方案都是先循环物品,再循环体积,然后循环决策。此题不是恰好装满的01背包问题,可用dp[j]表示背包容量为 j 时的所选物品最大价值。动态转移方程对于第 i 件物品只有两种情况选择或者不选,且第i件物品肯定是由前一个(第i-1个)物品转移过来的,所以再求第i个物品的dp[]时从体积从后向前循环,以免计算第i个物品的dp[j]时覆盖了暂时保存在数组中的前i-1...原创 2019-09-11 20:44:57 · 128 阅读 · 0 评论