1182. 与目标颜色间的最短距离 给你一个数组 colors,里面有 1、2、 3 三种颜色。 我们需要在 colors 上进行一些查询操作 queries,其中每个待查项都由两个整数 i 和 c 组成。 现在请你帮忙设计一个算法,查找从索引 i 到具有目标颜色 c 的元素之间的最短距离。 如
赋值操作函数原型:deque& operator=(const deque &deq); //重载等号操作符assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身。assign(n, elem); //将n个elem拷贝赋
函数原型:push_back(ele); //尾部插入元素elepop_back(); //删除最后一个元素insert(const_iterator pos, ele); //迭代器指向位置pos插入元素eleinsert(const_iterator pos, i
题目大意 给定 \(l,r\) ,求 \(\sum_{x=l}^r\sum_{y=l}^r[x+y=x\oplus y]\) 。 其中 \(0 \le l \le r \le 10^9\) 。 分析 首先对于题目中给出的式子,我们可以对它进行一些转换: \(\sum_{x=l}^r\sum_{y=l}^r[x+y=x\oplus y]\) \(=2\sum_{x=l}^r\sum_{y=x+1}^r[x+y=x\oplus y]+\sum_{x=
Analysis 显然用线段树来维护。考虑快速求出左右端点分居左右区间的方案数。 首先按位或和是满足单调性的,按位或的数越多,和越大,那么从左到右枚举右端点,左端点的可行范围一定是从左区间的左端点到左区间的某个位置,且这个位置是递增的。 那么我们就有了单次pushup复杂度为O(区间长度
package demo; public class P51 { //基数排序 //思路:数组中最大值位数为k,从个位开始往高位进行k轮(桶排序+填回原数组),每轮以那一位的数字为分桶的依据 public static void main(String[] args) { int[] a = {49, 38, 65, 197, 76, 213, 27, 50}; radixSort(a, getMaxPos(a));
【插头DP】【学习笔记】 Tips: 虽然插头Dp模板是黑的,但其实算法并不难理解,用到的只是轮廓线dp+哈希表而已,比较复杂的是讨论多种情况的转移和位运算,但封装几个函数以后,代码也十分简单了。 模板 Solution 首先考虑状压dp,考虑需要哪些状态,如果仅仅知道每个格子是否有向下伸出的插头是
1. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递
选择排序 非稳定版本与稳定版本 排序过程中选择一个比较大(大到小排序)的数,然后把它放到数组中指定的位置;这时候可以直接与数组中指定位置交换数据,但是可能会导致同值的数据的顺序发生改变,这就是所谓的“不稳定”。可以通过下图来理解所谓的“稳定”和“非稳定”。 不稳定排序算法
选择排序 非稳定版本与稳定版本 排序过程中选择一个比较大(大到小排序)的数,然后把它放到数组中指定的位置;这时候可以直接与数组中指定位置交换数据,但是可能会导致同值的数据的顺序发生改变,这就是所谓的“不稳定”。可以通过下图来理解所谓的“稳定”和“非稳定”。 不稳定排序算法
分享一个Python自带库去水印的方法 今天用WPS将PDF转图片,发现没有会员就会自带水印,于是萌生了用Python去水印的想法 from itertools import product from PIL import Image img = Image.open('Your Image Path') width, height = img.size for pos in product(range(width), ra
区间合并: #include <bits/stdc++.h> using namespace std; typedef pair <int,int> pii; vector<pii>pos; void merge(vector<pii>&pos) { vector <pii>ans; sort(pos.begin(),pos.end()); int st=-1e9+10,ed=-1e9+10; for
题意: 给定数组。q 次询问,每次问至少把 \(a[l,r]\) 拆成几个子序列,才能让每个子序列中的众数的出现次数 不大于子序列长度/2上取整 \(n,q\le 3e5, 1\le a_i\le n\) 思路: 绝对众数:出现次数严格大于N/2 如果区间众数不是绝对众数,则答案为1。否则,设绝对众数的出现次数为 x ,把其他所有
string子串 功能描述: 从字符串中获取想要的子串 函数原型: string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串 示例: //子串 void test01() { string str = "abcdefg"; string subStr = str.substr(1, 3); cout << "subS
题目链接:https://vjudge.net/problem/HDU-4417#author=634579757 很经典的分块模版题,出错的都是细节问题,考查学生的码力 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1e5+10; 7 int a[m
class Solution { public: int getarea(vector<int>& a, vector<int>& b, vector<int>& c){ int x1 = b[0] - a[0], y1 = b[1] - a[1], x2 = c[0] - a[0], y2 = c[1] - a[1]; return x1 * y2 - x2 * y1; } vector&
原题传送门 1. 问题描述 2. Solution neg_cnt = 0 pos_sum = 0 pos_cnt = 0 while True: try: n = int(input().strip()) if n < 0: neg_cnt += 1 elif n > 0: pos_sum += n pos_cnt += 1 except:
原题传送门 1. 题目描述 2. Solution import sys if sys.platform != "linux": file_in = open("input/HJ97.txt") sys.stdin = file_in while True: try: n = int(input().strip()) nums = list(map(int, input().strip().split()
维护区间最值的模板题。 1.树状数组 1 #include<bits/stdc++.h> 2 //树状数组做法 3 using namespace std; 4 const int N=5e4+10; 5 int m,ma[N],mi[N],n,c[N]; 6 7 int lowbit(int x){ 8 return x&(-x); 9 } 10 11 void ins(int x,int v){ 12 while(x<=n){
C - ThREE #include <bits/stdc++.h> #define IOS \ std::ios::sync_with_stdio(false); \ std::cin.tie(0); \ std::cout.tie(0); int main() { IOS; int n; std::cin >> n; std::v
Post time: 2021-10-29 18:22:46 题面 贡献一个官方题解做法的详细解释。 首先注意到一个贪心的思路,从前往后如果能够使某一段长度 \(=x\) 就一定会使其 \(= x\) 或 \(\geq x\)。 考虑设一个函数 \(f(pos,x)=npos\) 表示当限制长度为 \(x\) 时,从 \(pos\) 这个位置开始往后,第一个
省选日记 Day \(11\) - Day \(15\) Day \(11\) Apr 14, 2022, Thursday SDOI2019 染色 一开始一眼看出 \(O(n^3)\) 的做法, 设 \(f_{i, j, k}\) 表示计算到第 \(i\) 列, \((i, 1)\) 为颜色 \(j\), \((i, 2)\) 为颜色 \(k\) 的方案数. 统计 \(U_{i, j}\) 作为所有 \(f_{i, j, x}\)
只需要把询问按x升序排序,在查询的过程中不断让树状数组把<=x元素的下标处+1即可。(为此,把序列按val排序) #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; pair<int, int> a[N]; #define val first #define pos second struct query { int l, r, x, p
前置知识:康托展开 和 康托逆展开 解决什么问题? 能构造一个 \(1\sim N\) 的全排列 和 \(0\sim N!-1\) 之间的双射,在解决全排列的哈希问题上有奇效。 康托展开即是将全排列映射到自然数,而康托逆展开则是将自然数映射到一个全排列。 怎么解决? 对于一个 \(N\) 项全排列 \(\{p\}\),定义
一、概述 案例:在使用OpenCV的grabCut算法实现简单抠图操作的时候(因为使用到了鼠标坐标选择目标区域),使用到的Qt的鼠标的mousePressEvent(按下)、mouseMoveEvent(移动)、mouseReleaseEvent(释放)事件。实验下来其中只有mousePressEvent生效。看了一大堆的资料:说的最多的是设置setMouse