首页 > TAG信息列表 > maxl
跳表
我们先把跳表入个门。 我们发现很多时候我们能不写平衡树就不写,像有的巨神喜欢用线段树一样(但是线段树的常数我们就不多说了),那我们就也整一点比较怪的东西。我们考虑用链表维护一些平衡树的信息。 最近学了链表之后发现这个东西就是个神,支持很多常数小的操作甚至直接配合其他算法[LeetCode 1763] 最长的美好子字符串 [参考]
文章目录 题目链接题目描述示例1示例2示例3示例4提示题解1题解2题解3(参考自官方题解) 这是简单题???数据规模后边加3个0直接玩完… 题目链接 https://leetcode-cn.com/problems/longest-nice-substring/ 官方题解 题目描述 当一个字符串 s 包含的每一种字母的大写和小写L1-006-连续因子
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内; 开始的思路是循环尝试的暴力方法 1.此题目的原型类似于找素数,利用嵌套的循环来解决。 2.为了防止超时,又因为除了所有素数,至少会有洛谷 P1093 [NOIP2007 普及组] 奖学金 AC代码 2022 01 28(C++)
题目来源: P1093 [NOIP2007 普及组] 奖学金 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1093代码: //洛谷 P1093 [NOIP2007 普及组] 奖学金 AC代码 2022 01 28(C++) #include<bits/stdc++.h> using namespace std; struct s{ int chi; //语6.4.3 拓扑排序
好吧,笔者开单章开上瘾了,话不多说,先来一个拓扑排序,笔者最初自己写的时候并没有使用拓扑排序吧 Ordering_Tasks题解 点击查看笔者代码 #include<iostream> #include<cstring> #include<vector> using namespace std; const int maxl = 100+5; int cntr[maxl], cntc[maxl], mat[maxArray Destruction
DIV2-C 题意: 给一个数组然后选择一个x,每次删除两个数numl和numr但是numl+numr==x,然后x=max(numl,numr)。然后请你确定这样的x和每次选的numl和numr输出出来。 思考: 很明显啊如果删掉一个数,但是数组中还有数>=maxr,那么这个数就删不掉了,但是这个最大的数肯定是va[n],但是第一个m题解 CF1579G Minimal Coverage
CF1579G Minimal Coverage dp好题! link to the problem 解法 首先需要观察到:如果最长线段的长度为\(maxL\),那么答案不可能超过\(2maxL\) 。 证明的话,可以用构选法来说明:当处于当前线段的尾处于区间\([0,maxL]\)时,下一个线段向右延伸;反之,当当前线段的尾处于区间\([maxL+1,2maxL]\)2021.10.11
T1:a Problem: 给定CF118C Fancy Number(贪心,模拟)
传送门 解题思路 首先很显然可以贪心进行选择,枚举哪个数字有k个,然后优先绝对值更靠近他的数字,即可算出最小代价。 下一个要求是字典序最小。 还是先删掉绝对值靠近他的点,先从前往后正序删比他的的数字,再从后往前逆序删比他小的数字,即可保证字典序最小。 AC代码 #include<iostream两种树的直径求法
两种树的直径求法 两遍DFS 优点:方便记录直径的两端点。 缺点:无法除理带负权的树。 void dfs1(int now,int len) { if(len>maxl) { maxl=len; s=now;///找端点 } for(int i=head[now];i;i=nxt[i]) if(to[i]!=f[now])dfs1(to[i],len+1); }二叉树-获取树的深度
代码示例 代码中用到的二叉树BinaryTree类是 树结构-二叉查找树_lujiangui的专栏-CSDN博客 这里自定义的二叉树类 用的Queue类是 线性表-队列_lujiangui的专栏-CSDN博客 里的自定义队列类 //获取树的深度 public int getDept(){ return getDept(root);leetcode题库3——无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3:LeetCode动态规划 乘积为正数的最长子数组长度
Given an array of integers nums, find the maximum length of a subarray where the product of all its elements is positive. A subarray of an array is a consecutive sequence of zero or more values taken out of that array. Return the maximum length of a subaleetcode300. 最长递增子序列
300. 最长递增子序列 题目描述 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 思路分析 动态规划问题的最长单调子序列的模板题目cv2处理图片的模板
from PIL import Image from pytesseract import * from fnmatch import fnmatch from queue import Queue import cv2 import time import os def clear_border(img,img_name): '''去除边框 ''' filename = './out_img/' +POJ 1753
BFS可以延伸的应用变化繁多,这道题配合状态压缩共同解决,不过时空复杂度还可以进一步优化。 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio> #include <cstring> #include <cmath> #include <AtCoder Regular Contest 116C - Multiple Sequences
https://atcoder.jp/contests/arc116/tasks/arc116_c 经典不会组合 这题关键是想到对于dp[n][pi^ki],方案数是c(n-1+ki,n-1),就是你从(1,1)走到(n,ki)有多少种走法,而且可以连续增加ki,就相当于一次乘以pi的多次幂 然后线性筛预处理一下最小质因子,每次把最小质因数分解一下,然后递推AtCoder Beginner Contest 197 F - Construct a Palindrome
https://atcoder.jp/contests/abc197/tasks/abc197_f 过了一车人的套路我不会。。。 把题目转化成二维平面的模型,dis[u][v]表示从1到u,从n到v,一直走相同字母的距离 然后我们枚举每个点u:{s,e}的所有边,得到u:{s,e}->v:{s.v,e.v}这样的边,且他们走是相同的字母,这样枚举最大是m^2的codeforces1458B. Glass Half Spilled
https://codeforces.com/contest/1458/problem/B 经典dp循环边界出问题,A题不会做,B题卡一整场,C题没几个人过也不想看 初步观察有个很显然的想法,假设我们二分答案,首先选出来的k个瓶子总容量需要大于这个答案,然后由于其他的瓶子倒过来有损耗,那么我们肯定是优先选剩余水量多的不损耗分巧克力
分巧克力 儿童节那天有 K 位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。 为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 切出的巧克力需要满足: 形状是正方形,边长是gym101741 C. Cover the Paths
https://codeforces.com/gym/101741/problem/C 这题是受了18徐州的G题启发,在树上路径问题一般放到lca处讨论 那么这题想到路径lca就很好贪心了,我们随便选一个根节点,然后把每条路径的lca求出来,吧路径存在lca上 然后再按照dfs序的顺序处理,也就是说,我们处理一棵子树,必须把那些路径C. Chef Monocarp
题意:给定n个盘子,每一个盘子有一个数字 给定一个时间T,我们可以在每一分钟拿出一个盘子,权值为abs(拿出时刻-盘子权值) 每一分钟只能拿一个盘子 求,最小权值 思路:DP; 我们开二维数组dp[][] 前一维表示秒数,第二维表示枚举到了第J个盘子; 我们计算的[NOI2013]矩阵游戏(数列通项+费马小定理)
题目链接 Analysis 先把单独一行拿出来看,设 \(f_1\) 是这一行的第一个元素,有 \(f_i=f_{i-1}*a+b\)。所以 \(f_m=f_1a^{m-1}+\frac{a^{i-1}-1}{a-1}b\)。如果不会的可以再去补一下高中数学。 然后设 \(g_i\) 是第 \(i\) 行的 \(f_m\),有 \(g_i=(g_{i-1}c+d)a^{m-1}+\frac{a^{i-1}-1}2020.03.14组队赛补题
Architecture 题目链接:https://nanti.jisuanke.com/t/43465 这个题当时题目度的非常困难,当然最后也没读懂,梯口看了别人的题解才能明白,觉得豁然开朗。 题目大意:其实就是第一行给出r行每行的最大值,第二行给出c列每列的最大值,判断是否存在冲突。 题目分析:从每一个行里面找到最大的,然luoguP1273 有线电视网
很显然吧,直接做树形dp 两维 以什么为根的子树 选择多少个用户 所能得到的最大价值 注意 中转站不算 直接在转移的时候维护一下就好了 #include<bits/stdc++.h> #define MAXN 3000 using namespace std; //f[i][j]以i为根的子树选取j个用户的最大利润 //f[i][j] = max(f[i][