AcWing 算法基础课 基础语法
# AcWing 算法基础课 基础语法
ZhgDgE
这个作者很懒,什么都没留下…
展开
-
【区间最大平均值】POJ-2018 && 牛客 Average
题面: 一维情况: 题目链接: Best Cow Fences 题解: 区间最大平均值 二分搜索【POJ2018】 二维情况: 题目链接: Average 牛客Average AC代码: #include<iostream> using namespace std; const int N=1e5+10; double a[N],b[N]; double sum[N]; bool check(double * a,int n,int f,double x) { for(int i=1;原创 2021-08-13 15:36:12 · 89 阅读 · 0 评论 -
【寻找巧妙性质-双指针】 AtCoder - arc098_b Xor Sum 2
题目链接 题意:问有多少个区间,异或等于加法的和 题解 [AtCoder - arc098_b]Xor Sum 2 以下copy自题解 方法:尺取法(双指针)+ 前缀和 一个前置芝士: a ^ a ^ b = b,a ^ a = 0,a ^ b ≤ a + b。 这个知道就好。 首先定义两个数组记录前缀和,suma 记录数组元素之和,sumb 记录数组元素异或之和。 我们定义右端点 j 从 1 到 n 中枚举,找到第一个符合条件的最小的左端点 i ,更新答案就好了。 我们的最小原创 2021-06-21 20:57:59 · 126 阅读 · 2 评论 -
【其他形式的双指针】poj - 2566
题目链接 题意:求一个区间使得其和的绝对值与输入的 t 差值最小。 题解 尺取法需要区间具有某种单调性质 例如,右指针从左边界向右枚举,而左边界到某边界点,和此边界点到右指针之间具有不同的性质(二分思想) 有时,左指针移动到此边界处时,只需要判断一个方向上的情况。(套用y总模板) 而像这道题,需要判断两个方向上的情况,所以使用较灵活的双指针更合适。 AC代码: #include<iostream> #include<cstdio> #include<algorithm>原创 2021-06-21 20:05:46 · 112 阅读 · 0 评论 -
【经典离散化】区间和
#include<iostream> #include<cstdio> #include<algorithm> #include<map> #include<vector> using namespace std; typedef long long ll; const int N=3e5; int lsh[N],pcnt; int a[N],s[N]; int cnt; vector<pair<int,int> >add,原创 2021-06-21 18:05:31 · 50 阅读 · 0 评论 -
【双指针】×2 最长连续不重复子序列 dd爱框框
最长连续不重复子序列 牛客小白月赛34 dd爱框框 最长连续不重复子序列 #include<iostream> using namespace std; int s[100005]; int a[100005]; int main() { int n,res=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1,j=1;i<=n;i++) { s[a[i]]++; while(s[原创 2021-06-20 15:33:13 · 85 阅读 · 0 评论 -
【check二分】P3743 kotori的设备
题目背景 kotori 有 n 个可同时使用的设备。 题目描述 第 i 个设备每秒消耗ai个单位能量。能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗。也就是说,对于任意实数 ,在 k 秒内消耗的能量均为k*ai 单位。在开始的时候第 i 个设备里存储着bi个单位能量。 同时 kotori 又有一个可以给任意一个设备充电的充电宝,每秒可以给接通的设备充能p 个单位,充能也是连续的,不再赘述。你可以在任意时间给任意一个设备充能,从一个设备切换到另一个设备的时间忽略不计。 kotori 想把这原创 2021-06-20 15:25:04 · 70 阅读 · 0 评论 -
【经典二分】AcWing 789. 数的范围
给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 n 和 q,表示数组长度和询问个数。 第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。 接下来 q 行,每行包含一个整数 k,表示一个询问元素。 输出格式 共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在该元素,则返回 -1 -1。 数据原创 2021-06-20 15:17:08 · 71 阅读 · 0 评论 -
【算法基础课】基础语法 笔记
整数二分算法模板 两种二分模板:寻找最大值,寻找最小值(保证有解) bool check(int x) {/* ... */} // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: int bsearch_1(int l, int r) { while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; //原创 2021-06-20 15:02:46 · 119 阅读 · 0 评论