![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 59
算法竞赛
等待闪电
这个作者很懒,什么都没留下…
展开
-
2022.3.19美团笔试
2个小时5道编程题,只做出了3道,感觉人无了第一题大意是有n个物品,可以按满减和折扣的方式购买,求前k个物品最划算的购买方式。直接模拟即可,细节没注意浪费了好久。#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL, LL> PII;LL p1[50010], p2[50010];vector<PII> rule;LL t[50010];L原创 2022-03-19 12:19:47 · 863 阅读 · 3 评论 -
算法——基础数学
约数互质:两个数公约数只有1对于一个大于1正整数n可以分解质因数:n = p1^a1 * p2^a2 * p3^a3 * … * pk^ak求一个数的约数个数:n的正约数有(a₁+1)(a₂+1)(a₃+1)…(ak+1)个求一个数的所有约数的和:n的正约数之和为(p1^0 + p1^1 + p1^2 + … + p1^a1) * (p2^0 + p2^1 + p2^2 + … + p2^a2) * … * (pk^0 + pk^1 + pk^2 + … + pk^ak)// 分解约数voi原创 2020-08-29 10:51:45 · 227 阅读 · 1 评论 -
2019蓝桥杯B组决赛题解
A1、2019<X<Y2、2019^2, X^2, Y^2构成等差数列满足条件的X和Y可能有多种情况,请给出X+Y的值,并且令X+Y尽可能的小。题解:暴力枚举判断下第三个数是否能分解为k*k即可。 B2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种?注意:分解方案不考虑顺序,如2+2017=2019和2017+2=2019属于同一种方案。题解:素数筛筛2-2019中素数,再用01背包。#include <iostream>#incl原创 2021-05-25 20:06:39 · 126 阅读 · 0 评论 -
2020智算之道初赛第二场
A.声控灯#pragma GCC optimize(2)#include <cstdio>using namespace std;int main(){ int t; scanf("%d", &t); int n, m, nums[5]; for (int i = 0; i < t; i++) { scanf("%d%d", &n, &m); for (int j =原创 2020-07-20 12:26:22 · 346 阅读 · 0 评论 -
dfs之剪枝
优化搜索顺序排除等效冗余可行性剪枝最优性剪枝原创 2021-03-06 13:37:23 · 775 阅读 · 0 评论 -
kmp模板
洛谷P3375#include <iostream>#include <cstring>using namespace std;const int N = 1000010;char s1[N], s2[N];int ne[N]; // ne[i]:s2前i位组成的子串的最长相等前缀后缀的长度int main(){ s1[0] = ' ', s2[0] = ' '; cin >> s1+1 >> s2+1; // 为方便可将字符串下标定义原创 2020-08-06 20:12:22 · 127 阅读 · 0 评论 -
前缀和与差分
二维数组的前缀和#include <iostream>using namespace std;const int N = 1010;int a[N][N], sum[N][N];int main(){ int n, m, q; cin >> n >> m >> q; for (int i = 1; i <= n; i++) for(int j = 1; j <= m; j++)原创 2020-07-21 14:31:17 · 115 阅读 · 0 评论 -
快排与归并模板
快排摸板void quickSort(int nums[], int l, int r){ if(l >= r) return; int x = nums[l]; int lp = l-1, rp = r+1; // 定义左右两指针 while(lp < rp) { do lp++; while (q[lp] < x); do rp--; while (q[rp] > x); if (l原创 2020-07-17 11:18:50 · 206 阅读 · 0 评论 -
简短优美的二分模板
二分查找下面分享一个简洁易记的二分查找模板,以一个升序的数组为列,有以下两种查找方式。查找第一个小于k的数值的下标。int l = 0, r = n-1;while (l < r){ int mid = (l + r) >> 1; if (nums[mid] >= k) r = mid; else l = mid + 1;}查找最后一个小于k的数值的下标int l = 0, r = n-1;while (l < r){原创 2020-07-16 22:49:21 · 168 阅读 · 0 评论