acm技巧
不可知论大祭司
Know how to solve every problem that has been solved.
展开
-
【P1496】 火烧赤壁 离散化 +差分
code#include <iostream>#include <cctype>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;inline int read(){ int x = 0, op = 1; char ch = getchar(); while (!isdi原创 2021-01-22 16:59:58 · 163 阅读 · 0 评论 -
【CF1474D】Cleaning
链接传送门分析先分析不交换便可以拿走的情况,发显位于两个端点的石头只能依附于旁边一侧的石头,拿走第一堆,2到n的2变成了第一堆。可以写出判断的函数int check(int* arr, int end){ for (int i = 1; i <= end; ++i) { arr[i] -= arr[i - 1]; if (arr[i] < 0) return 0; } return arr[end] == 0;}如果是暴力枚原创 2021-01-21 08:32:38 · 261 阅读 · 0 评论 -
Leetcode239滑动窗口最大值
分析没有用什么复杂的数据结构,上一次的blog是用了deque解决的,这次用java写的,直接用数组模拟了dequecodeclass Solution { public int[] maxSlidingWindow(int[] nums, int k) { int que[] = new int[nums.length]; int ans[] = new int[nums.length - k + 1]; int tail = 1, head原创 2021-01-02 15:26:47 · 125 阅读 · 0 评论 -
【CF961B】Lecture Sleep 尺取法
链接传送门代码用尺取法的时候还是要注意边界条件的判读,不要出现漏取或者是越界的情况#include <cstdio>#include <algorithm>#include <cctype>const int N = 1e5 + 10;int n, k, a[N];inline int read(){ int x = 0; char ch = getchar(); while (!isdigit(ch)){ch = getchar(原创 2020-12-30 10:59:00 · 136 阅读 · 0 评论 -
【CF1133C】Balanced Team 尺取法 / 队列
链接传送门思路就是一个很基础的问题,可以转化为排序后极值差不超过5的序列的最大长度。代码解1用尺取法,双指针当然是可以的啦#include <cstdio>#include <algorithm>#include <cctype>const int N = 2e5 + 10;int n, a[N];inline int read(){ int x = 0; char ch = getchar(); while (!isdigit原创 2020-12-30 10:35:15 · 161 阅读 · 0 评论 -
【CF1257C】Dominated Subarray map的合理使用
链接传送门分析仔细读题可以发现,实际上就是找一个连续子序列,满足子序列两边的值是相等的,求这样的子序列的长度最小值。(如果中间有其它想的的数,或者是和两端相等的数,比如1,2,3,2,1或者是1,3,2, 1, 6,4,1),这种情况也可以归纳为上述情况,在此不做证明。由于数据范围为2e5,而且有多组测试,O(n^2)的算法一定不行。我们可以考虑记录每个值对应的位置,并在遍历过程中更新答案和a[i]出现的位置。如果像桶排序那样开数组的话实际上空间开销很大,所以这里应当选择用map映射。代码#i原创 2020-12-30 10:04:05 · 158 阅读 · 0 评论 -
【CF1006C】Three Parts of the Array双指针
链接链接代码双指针#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N = 2e5 + 10;int n, a[N];ll sum1, sum3, res;int main() { cin >> n; for (int i = 0; i < n; ++i) cin >> a[i];原创 2020-12-30 09:33:24 · 137 阅读 · 0 评论 -
【CF8389】Alyona and a tree 树上差分 + 二分
树上差分题目链接概述分析代码题目链接链接概述Alyona has a tree with n vertices. The root of the tree is the vertex 1. In each vertex Alyona wrote an positive integer, in the vertex i she wrote ai. Moreover, the girl wrote a positive integer to every edge of the tree (possib原创 2020-12-28 12:39:44 · 204 阅读 · 0 评论 -
【P1886】 滑动窗口 单调队列
滑动窗口题目描述链接代码题目描述有一个长为 n 的序列 a以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。链接传送门代码这里用了用双端队列实现的单调队列,以维护最大值为例。新的元素与队尾相比如果大就让队尾处队,同时我们还需要考虑窗口大小的限制,如果队尾和队首序号差大于等于k的话就就要缩小窗口,即让队首出队,这样就可以维护大小为k的窗口的最大值,时间复杂度是O(n),用双端队列实现也比较简单,在这个特定问题上的确要比线段树要更优。#原创 2020-12-12 18:53:34 · 305 阅读 · 0 评论 -
【CF251A】Points on Line O(n)复杂度
Points on Line题目描述分析代码题目描述Little Petya likes points a lot. Recently his mom has presented him n points lying on the line OX. Now Petya is wondering in how many ways he can choose three distinct points so that the distance between the two farthest of them原创 2020-12-09 14:31:20 · 296 阅读 · 0 评论 -
【CF1285B】前缀和的简单应用
Just Eat It !题目大意题目链接代码题目大意在一个从1到n的数列中是否存在不为它本身的连续子列,使得子列和大于n项总和。题目链接传送门在这里插入代码片代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int N = 1e5 + 10;typedef long long ll;ll sum[N];int t, n;in原创 2020-12-08 07:45:05 · 143 阅读 · 0 评论 -
【POJ3320】尺取法02
Jessica's Reading Problem题目大意代码小结题目大意Jessica’s a very lovely girl wooed by lots of boys. Recently she has a problem. The final exam is coming, yet she has spent little time on it. If she wants to pass it, she has to master all ideas included in a very th原创 2020-12-07 21:14:09 · 87 阅读 · 0 评论