思路 维护双链表 head代表最久没被使用的节点,当我们要更新时 普通链表
123
sort
第一题奇偶排序思路按照既定的顺序进行排序即可 参考代码:#include <iostream>#include <sstream>#include <string>#include <vector>std::vector<int> solution(int n, std::vector<int>& vec) {
1
蓝桥杯解析
链接思路:原来n^2暴力建边取割点肯定可以,就是太慢了,我们思考对于每个不同的质因数建立新的虚点,连向存在质因数的点,这样最多只有nlogn条边
链接用于求必选点的最小生成树,复杂度指数,思想是dp,dp[i][j]代表以i为根j状态的必选点dp[i][j]代表以i为根j状态的必选点dp[i][j]代表以i为根j状态的必选点。状压处理两个转移
链接题意就是求给定一棵树求∑0n−1Wl∑∑[dist(i,j)==L]∗a[i]∗a[j]\sum_{0}^{n-1} W_l \sum\sum [dist(i,j)==L]*a[i]*
link思路:当然可以二分 + bfs 复杂度O(log(n∗m)n∗m)O(log(n*m)n*m)O(log(n∗m)n∗m) 这个比较好想,但如何进一步优化,我们可以逆向考虑,从终点倒着找到离终点最近的火和最近的人的距离,当然如果火比人先到那肯定就是-1,如果找不到火就是1e9,然后就判断最近的火和人的位置关系,因为右下角只有两种转移位置,一种是上方一种
#include<bits/stdc++.h>using namespace std;int b[200010][33];int n,m,q,k;const int N=200010;bool st[N];int p[N];int cnt;int h[N],e[N<<1]
#include<bits/stdc++.h>using namespace std;const int N=500010;int pre[N];int ne[N];int a[N];int id[N];int c[N];in
struct pairhash {public: template <typename T, typename U> std::size_t operator()(const std::pair<T, U> &x) const { return std::hash<T>()(x.first) ^
LR0 LR1(带向前搜索符) SLR1分析表结构都是这种情况的,解释一下acc,一张表格有且仅有一个acc,也就是终止状态,当存在I0并且点到了最后的时候那么就是acc了。在写文法的时候我们要先预处理文法,一是先分裂文法也就是把文法拆开,二是拓展文法,比如一开始的符号是s ,我们加入一个s’->s的状态LR(0)解释一下规约和移进规约就是s->t
#include<bits/stdc++.h>using namespace std;const int N=600010;#define int long longstruct Node{ int s[2]
考虑计算贡献#include<bits/stdc++.h>using namespace std;vector<int>v[300010];#define int long longint res=0;co
基本说明利用ViewModel的Observe对数据进行检测存储的数据类型是LiveDataImageButton实现-1操作,button实现+1操作Mai
小练习
页面导航Navigation基本说明做了两个Fragment然后做了两个动作,将两个可以进行切换HomeFragment代码import
思路:可以反转一个区间 ,就代表 取两段 互不相交的合法区间,这里互不相交指的是对于任何一个元素,两段区间不存在都有该位的情况,合法也是,然后最大值,由于每个数是二进制位,说明每一段区间长度不超过 24,所以初始值dp[i]=i,如果i能取到,我们可以子集dp代表 i的子集的最大值,
import systry: while True: alpha=["A","H","I","M","O","T","T","U","V","W","X","Y"] s = sys.stdin.readline().strip() if s == '': break
class Splay{ class node { int v,father; int ch[]=new int[2]; int sum;
题意:冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。思路:可以二分写,但会多一个log,其实双指针on 能做的应该,无非就是找到离房子最近的供暖器,然后每个房子取max即可。C++code:class Solution {public: int findRadius(vector<
题意:思路:直接模拟即可 复杂度O(n2)O(n^2)O(n2)class Solution { public int findJudge(int n, int[][] trust) { boolean g[][]=new boolean [n+1][n+1]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=false; for(int i=0;i<trust.l
题意:给定一个未知的数列这个数列每个数都不同,长度为n 可以询问n次,询问k个位置,每次询问可以得到k个中第m小的数的值和位置,问这个m是多少。 思路:直接暴力问前k+1个位置,然后就可以发现,总共就两个数,m就是较大数出现的次数。
link 题意:让你将点的集合划分成两个,然后两集合之间的距离没有在集合内部出现。 思路: 一开始以为是二分图啥的,结果是思维,考虑把点划分成4类,00,01,10,11,
我们可以发现,答案肯定<=(n-1)*p,所以对于gcd大于等于p的区间我们可以不用考虑他带来的贡献,根据克鲁斯卡尔贪心的原则,我们可以按照点权来排序,从小到大枚举,然后嗯往左和右拓展,直到不能拓展或者找到在相同集合的数为止或者区间gcd不是当前数为止。
link 题意:从1号点开始走,每个点只走一次,从i走到j点代价是max(a[j]-a[i],c[i]),最后回到1号点,问最小的花费。 n<=1e5
link 题意:要求在数组中选一些数,使得他们的和为0,i从1到n ,i-n<=a[i]<=i-1;
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号