分类: ALGORITHM

My Algorithm Learning

103 篇文章

数组操作
Origional Link 思想: 贪心,模拟。 首先对数组进行从小到大排序,再找到第一个 a[idx] != 0 的位置。 对于每次询问,以 base 记录当前数组已经减去的总值,判断时应当计算当前元素与 base 的差值。 若 a[idx] - base > 0 说明需要将后续所有元素减…
货仓选址
Origional Link 思想: 贪心。 设仓库选址最佳处为 $P$,此时在该位置左侧存在 $m$ 个货仓,右侧存在 $n$ 个货仓,总距离为 $L$。 若更改货仓位置为 $P-1$,则总长度变为 $L - m + n$。 若更改货仓位置为 $P + 1$,则总长度变为 $L + m - n$。…
ABC的整除问题
原题链接 描述: 给定三个非负整数 $A,B,C$,且保证 $A\le B,C\ne 0$,求在区间 $[A, B]$ 中,存在多少个整数可以被 $C$ 整除? 输入格式: 第一行,一个整数 $T$,代表 $T$ 个测试样例。 接下来 $T$ 行,每行给出三个非负整数 $A,B,C$。 输出格式: …
最小正整数
Original Link 思想: 最大公约数和最小公倍数。 要求构造出的数末尾包含 $k$ 个 $0$,且可以被 $n$ 整除的最小整数; 则构造出的数必然也可以被 $10^k$ 整除,满足同时被 $n$ 和 $10^k$ 整除, 显然,该数为 $n$ 和 $10^k$ 的最小公倍数时即可满足条件…
寻找变化前的01序列
Original Link 思想: 模拟 用 res 记录出现的连续的 $1$ 的个数: 若出现 s[i] == '0' 则将其置零。 若 res == 5 则不输出任何内容。 其他情况下直接输出 s[i] 代码: #include <bits/stdc++.h> u…
青蛙跳
Origional Link 思想: 思维。 青蛙一共跳了 k 次,则: 当 k 为奇数时,向右边跳了 k / 2 + 1 次,向左边跳了 k / 2 次。 当 k 为偶数时,向右边跳了 k / 2 次,向左边跳了 k / 2 次。 代码: #include <bits/stdc++.h>…
最短距离
Original Link 思想: 前缀和。 由于出口为环状,故将数组首尾相连。 构造前缀和数组,即可得到在任意出口顺时针方向或逆时针向走到对应出口的距离之和。 对于每次询问,输出顺时针和逆时针方向上,两个出口最短的距离即可。 代码: #include <bits/stdc++.h> u…
金币
Original Link 思想: 模拟。 根据题意,设置变量 cnt 和 day 分别代表当天能收到的金币数和收到 cnt 金币的天数。 循环枚举第 i 天,每次循环: 若当天 cnt == day 说明金币需要增加 cnt ++,且要重置 day = 0。 总共收到的金币 sum += cnt;…
剪绳子
Original Link 思想: 二分。 绳子最长为 1e9。 考虑二分: 若当前绳长满足要求,则说明还有可能取更长的绳长; 若当前绳长不满足要求,则说明当前绳长不可能是最终答案; 由于绳子长度保留两位小数,则当二分的边界取到两者差值不超过 eps = 1e-4 即可。 利用 a[N] 存储绳长数…
圆形牛棚
Original Link 思想: 前缀和。 由于牛棚为环状,故将数组首尾相连。 利用 sum 记录牛牛们需要走的距离,前缀和记录 a[i] 扇门 i ~ n 的距离。 从连接后的数组开始,即 i = n ~ 2 * n 开始遍历,sum 减去后一个房间牛牛走过的距离,再加上该房间牛牛走到 i + …