【马蹄集】第十四周作业

第十四周作业



目录

  • MT2134 泡泡
  • MT2135 调整队伍
  • MT2141 快排变形
  • MT2142 逆序
  • MT2143 线段树




MT2134 泡泡

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

小码哥小时候喜欢吹泡泡,有一次他吹出了 n n n 个一样小的泡泡,过了一段时间后,这些泡泡相互碰到一起,形成了各种大小的泡泡…,但小码哥不知道的是,他生活的地方是母体构筑的虚拟世界,里面的泡泡实际是一串串被拼成环状的数字。
小码哥一开始吹出的泡泡被母体记为 1 , 2 , . . . , n 1,2,...,n 12...n,而泡泡的碰撞融合实际是数字的拼接(有序)。母体会通过模拟得知两个泡泡环碰撞的情况(用 x → y x→y xy 表示)。例如,有一个为 1 − 2 1-2 12 的泡泡环与 3 − 4 − 5 3-4-5 345 的泡泡环碰撞,碰撞的点为 1 → 4 1→4 14 (后一个数字接在前一个数字下面〉,则会形成 1 − 4 − 5 − 3 − 2 1-4-5-3-2 14532 的泡泡环。
一开始所有泡泡环都只有一个数字,母体演算出了泡泡之后的碰撞点,现在请你输出泡泡碰撞完后的所有泡泡的情况。

格式

输入格式:第一行两个整数 n ,   m n,\ m n, m,表示一开始泡泡的数量和泡泡碰撞的次数;
     接下来 m m m 行,每行两个数字 x , y x,y x,y,表示泡泡碰撞的两个点。
输出格式:输出所有泡泡的情况,一行表示一个泡泡的情况(要求按字典序最小的方式按顺序输出)。

样例 1

输入:9 6
   4 1
   6 1
   5 1
   6 8
   2 4
   9 7

输出:1 2 4 6 8 5
   3
   7 9

备注

其中: 1 ≤ m < n ≤ 10 6 ,   1 ≤ x ≤ y ≤ n 1\le m<n\le{10}^6,\ 1\le x\le y\le n 1m<n106, 1xyn,保证 x ,   y x,\ y x, y 属于不同的泡泡环。

样例解释

相关知识点: 链表


题解


考察了双向链表,但这道题的描述感觉不够形象,理解题目都有一定难度。不过整体也不是很难,本质就是链表内部断链与重连的过程。这道题有一个技巧,就是可以利用数组的下标作为泡泡的 valve 值,这样能省去检索时间从而提高访问效率。下面直接给出完整代码:

/*
    MT2134 泡泡 
*/

#include<bits/stdc++.h> 
using namespace std;

const int MAX = 1e6+5;

struct Node{
    // 当前对象的前、后向指针 
    int l,r;
    bool flag; 
};
Node node[MAX];

int main( )
{
    int n, m, x, y, tmpl, tmpr, tmp; 
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        node[i].l=node[i].r=i;
    while(m--){
        cin>>x>>y;
        tmpl = node[x].r, tmpr = node[y].l;
        node[x].r = y, node[y].l = x;
        node[tmpl].l = tmpr, node[tmpr].r = tmpl;
    }
    for(int i=1;i<=n;i++){
        if(!node[i].flag){
            tmp = i;
            while(!node[tmp].flag){
                cout<<tmp<<" ";
                node[tmp].flag = true;
                tmp = node[tmp].r;
            }
            cout<<endl;
        }
    }
    return 0;
}


MT2135 调整队伍

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

小码哥迎来了他大学的第一次军训,军训的第一个项目就是列队,每个同学在队伍中都有属于自己的编号。但在练习过程中,教官怎么看这支队伍怎么不顺眼,于是决定调整一下队伍的顺序。
为了顺便考验同学们的反应力,教官与学生们约定了一个口令,每当他说 x y 0,x 号同学就要移动到 y 号同学的前面,每当他说 x y 1,x 号同学就要移动到 y 号同学的后面,但学生们不想一次次慢慢移动这么麻烦,想要知道队伍最后是怎么排的然后直接排好。为了解决同学们的烦恼,小码哥立刻动手原地写了一个程序算出了最终排序。
现在告诉你队伍从前到后的初始排序编号以及教官的口令,要你得出队伍从前往后的最终排序。已知有 n 个学生,编号不重复且 1 ≤ 编号 ≤ n 。

格式

输入格式:第一行包含两个整数 n ,   m n,\ m n, m,分别表示学生的数量和教官口令的数量;
     第二行 n n n 个正整数,表示学生们的初始排序;
     接下来 m m m 行,每行 3 个整数,表示教官的口令。
输出格式: n n n 个数字,每个数字之间用空格隔开,表示队伍从前往后的最终排序。

样例1

输入:10 5
   8 4 6 7 9 3 5 10 1 2
   4 9 0
   10 5 1
   3 9 0
   1 9 1
   3 6 0

输出:8 3 6 7 4 9 1 5 10 2

备注

其中: 2 ≤ n ≤ 3 × 10 5 ,   1 ≤ m ≤ 3 × 10 6 2\le n\le3\times{10}^5,\ 1\le m\le3\times{10}^6 2n3×105, 1m3×106,保证 1 ≤ x ≤ y ≤ n 1\le x\le y\le n 1xyn x ≠ y x\neq y x=y


相关知识点:链表


题解


本题依然是考察双向链,下面直接给出完整代码:

/*
    MT2135 调整队伍 
*/

#include<bits/stdc++.h> 
using namespace std;

const int MAX = 3e5+5;
struct Node{
    // 当前对象的前、后向指针 
    int l,r;
};
Node node[MAX];
int n, m, head, now;

int main( )
{
    int tmp, x, y ,opt, tmpl, tmpr; 
    cin>>n>>m;
    while(n--){
        cin>>tmp;
        node[tmp].l = now;
        node[now].r = tmp;
        now = tmp;
    }
    while(m--){
        cin>>x>>y>>opt;
        tmpl = node[x].l, tmpr = node[x].r;
        node[tmpl].r = tmpr, node[tmpr].l = tmpl;
        tmpl = node[y].l, tmpr = node[y].r;
        if(opt){
            node[x].r = tmpr;
            node[x].l = y;
            node[y].r = x;
            node[tmpr].l = x;
        }else{
            node[x].l = tmpl;
            node[x].r = y;
            node[y].l = x;
            node[tmpl].r = x;
        }
    }
    now = node[head].r;
    while(now){
        cout<<now<<" ";
        now = node[now].r;
    }
    return 0;
}


MT2141 快排变形

难度:黄金    时间限制:1秒    占用内存:128M
题目描述

n n n 个数,求通过每次交换邻项的两个数来使数组中的元素变为升序排列的最小交换次数。如序列 {9, 8, 7, 6, 5} 变为升序 {5, 6, 7, 8, 9} 最少需要 10 次邻项交换。

格式

输入格式:第一行输入一个整数 n n n ,表示序列长度;
     第二行输入 n n n 个数;。
输出格式:输出一个整数,表示最少的交换次数。

样例 1

输入:5
   9 8 7 6 5

输出:10

备注

其中: 1 ≤ n ≤ 200000 1\le n\le200000 1n200000


相关知识点:树状数组


题解


这道题实际上考察的是求序列的逆序对个数。

若要用最少的邻项交换次数使得该序列变为升序,那么我们每次交换就一定要减少整个序列的逆序对个数(进行有效交换)。在这样的情况下,如果我们交换了 n 次,就表示该序列有 n 个逆序对。例如题目给出的例子中(序列 {9, 8, 7, 6, 5} )含有的逆序对为:{<9, 8>, <9, 7>, <9, 6>, <9, 5>, <8, 7>, <8, 6>, <8, 5>, <7, 6>, <7, 5>, <6, 5> }共10 个,因此其通过邻项交换使原序列变得有序的最低交换次数就为10。

求逆序对可以用归并排序也可以用树状数组(实际上,求逆序对是树状数组的一个经典用例),由于前面的作业已经用过归并排序求逆序对,因此下面给出利用树状数组求解的方法(专栏链接:【算法与数据结构】—— 树状数组,该文对树状数组的算法原理进行了详细分析和讲解,并在最后附上了利用树状数组求解逆序对的算法),此处直接给出求解本题的完整代码(已 AC):

/*
    MT2141 快排变形
*/
#include <bits/stdc++.h>
using namespace std;

const int MAX = 2e5 + 5;
// a 数组存放数据序号、b 数组存放数据绝对取值 
int a[MAX], b[MAX], c[MAX], n;
long ans;

// 树状数组模板 
int lowbit(int x) { return x & -x; }
void add(int i, int x)
{
    while(i<=n){
        c[i] += x;
        i += lowbit(i);
    }   
}
int sum(int i)
{
    int ans = 0;
    while(i>0){
        ans += c[i];
        i -= lowbit(i);
    }
    return ans;
}

// 进行数据压缩时的比较函数 
bool cmp(const int x, const int y)
{
    if (b[x] == b[y])
        return x > y;
    return b[x] > b[y];
}


MT2142 逆序

难度:钻石    时间限制:1秒    占用内存:128M
题目描述

给一个长度为 n n n 的排列 p p p,找一个元素,使得从排列中取出这个元素以后排列的| records最多。一个 record 是一个元素 a i a_i ai 满足:对于每个正整数 1 ≤ j < i ,   a i > a j 1\le j<i,\ a_i>a_j 1j<i, ai>aj

格式

输入格式:第一行为 n n n
     第二行为排列 p p p
输出格式:一个整数即答案。

样例 1

输入:5
   5 1 2 3 4

输出:5

备注

其中: 1 ≤ n ,    a i ≤ 1 e 5 1\le n,\ \ a_i\le1e5 1n,  ai1e5
当答案不唯一时,输出较小的数。如:
(1) 3 4 5 1 2
(2) 3 4 5 2 1
上面两种情况,均输出1。


相关知识点:树状数组


题解


首先要弄清楚题目所说的 record是什么意思。实际上,一个 record 是指在该序列中,某个元素 a i   ( i ≥ 1 ) a_i\ (i\geq1) ai (i1),对任意 a j   ( 1 ≤ j ≤ i ) a_j\ (1\le j\le i) aj (1ji) 都有 a j < a i a_j<a_i aj<ai 成立。每出现一个这样的 a i a_i ai,就认为当前序列出现了一个 record 。例如:对序列 {1, 2, 3, 4, 5} 而言,其为一个严格递增序列,所以它的 records 为 5。对于一个长度为 n n n 的序列,如果我们从中 “拿走” 某个元素,其长度就变为 n − 1 n-1 n1,在这样的情况下,其 records 的最大取值即为 n − 1 n-1 n1。本题要求的是:“拿走哪个元素能使得 records 的取值最大?”对于序列 {1, 2, 3, 4, 5} ,无论我们取出其中的哪个元素,其始终保持递增,因此其最大的 records 始终为 4,但根据题目的意思(当答案不唯一时,输出较小的数),我们应该取出的数为 1。对于序列 {5, 1, 2, 3, 4},只有取出数 5,才能使得该序列的 records 最大(取其他任意数得到的 records 均为 0 )。

那要怎么找出这个数呢?一种直接的办法是:对序列中的每个元素都进行枚举,求取出该数后,整个序列的 records,并在最后输出最大 records 对应的取数。这样做法的时间复杂度为 O ( n 3 ) O\left(n^3\right) O(n3)。其中,枚举每个元素需要 O ( n ) O\left(n\right) O(n) ,对每一次枚举计算整个序列的 records 需要 O ( n 2 ) O\left(n^2\right) O(n2)。显然,这样的办法是及其低效且超时无疑的。

有没有什么办法可以避免去求 “取出某个元素后整个序列的records” ?我们可以借助动态规划的思想:定义一个数组 chg[i],表示取出元素i后,其会对整个序列带来的 records 相对增益。例如,chg[5] = 8 表示取出元素 5 后,整个序列的 records 最少会增加 8;chg[6] = -3 表示取出元素 6 后,整个序列的 records 会减少 3。接下来从头到尾对整个数组进行扫描,以完善chg[] 数组的取值。最终,整个 records 数组中的最大取值即指示了 “取出哪个元素能使得 records 的取值最大”。
chg[] 数组的状态转移规则是怎样的呢?对于某个序列,考虑当前第 i i i 个取值 n u m num num

  • 如果前面有 i − 1 i-1 i1 个数比 n u m num num 小,就说明当前第 i i i 个数是目前序列(截至第 i i i 位)的最大值。也就是说, n u m num num 的存在会使得序列的records增加。因此,将num取出会降低 records,即在这种情况下 chg[num]–;
  • 如果前面有 i − 2 i-2 i2 个数比 n u m num num 小,就说明在第 i i i 个数之前存在一个比其更大的数(假设该数为 m a x n u m maxnum maxnum)。此时若删除 m a x n u m maxnum maxnum,其就就会给当前序列的 records 带来正增益,即在这种情况下 chg[maxnum]++;
  • 如果前面有低于 i − 2 i-2 i2 个数比 n u m num num 小(即存在两个及以上的数比 n u m num num 大),那就不需要考虑了,因为题目要求只能取出一个数,如果前面更大数的个数超过 1,则无论取什么数,都不会在后续形成 record,如序列 {6, 5, 1, 2, 3, 4}。因此对这种情况,直接跳过即可。

根据这样的规则,在遍历整个输入序列并完善 chg[ ] 数组后,我们就能通过寻找其中的最大值来得到最终的取数。例如,对于输入序列 {1, 2, 5, 3, 4},chg[]数组的构建过程如下(初始情况下全部元素赋0值):

  • 第1个数1,其前面不存在比他大的数,因此 chg[1]–,得到 chg[1] = -1;
  • 第2个数2,其前面不存在比他大的数,因此 chg[2]–,得到 chg[4] = -1;
  • 第3个数5,其前面不存在比他大的数,因此 chg[5]–,得到 chg[5] = -1;
  • 第4个数3,其前面存在1个比他大的数5,因此 chg[5]++,得到 chg[5] = 0;
  • 第5个数4,其前面存在1个比他大的数5,因此 chg[5]++,得到 chg[5] = 1。

最后遍历整个 chg[ ] 数组,发现 chg[i] 的最大值为 chg[5] = 1,故认为取出元素 5 能使得这个序列的 records 最大。观察该数组,发现从该序列中取出元素 5 后,整个序列的 records 为4(达到了最大值),其并不一定等于 chg[5] = 1。这表明,chg[ ] 的取值反应的是 chg[ ] 中各数在被取出时对整个序列的 records 的相对大小,而不是绝对取值。

因此,根据上面的分析,可以将当前的任务转换为:在输入数据的同时(状态转移过程中),快速求出截至当前序列的非逆序数。另一方面,由于题中说明了输入序列是一个 “排列”,因此该序列中不会出现重复元素。所以我们要做的,实际上是动态计算当前序列所包含的 “顺序数”。

动态求顺序数,这很容易让我们想到一个数据结构:树状数组。这一数据结构直接套模板即可。

下面直接给出利用树状数组求解本题的完整代码:

/*
    MT2142 逆序 
*/

#include<bits/stdc++.h> 
using namespace std;

const int MAX = 1e5+5;
int c[MAX], chg[MAX]; 

// 树状数组模板 
int lowbit(int x)
{return x & -x;}
void update(int x){
    while(x<MAX){
        c[x]++;
        x += lowbit(x);
    }
} 
int getSum(int x){
    int ans = 0;                                                                                                                                                                          
    while(x>0){
        ans += c[x];
        x -= lowbit(x);
    }
    return ans;
}

int main( )
{
    // 录入数据
    int n, x, maxx=0, cnt, ans = 1;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x;
        maxx = max(maxx, x);
        // 计算前面有多少个数比 x 小 
        cnt = getSum(x);
        // 如果个数为 i-1 就表示当前最大值就是这个数本身 
        if(cnt == i-1) chg[maxx]--;
        // 如果个数为 i-2 就表示前面存在一个比当前数更大的数 
        if(cnt == i-2) chg[maxx]++;
        // 更新点至树状数组 
        update(x);
    } 
    // 寻找 chg 数组的最大取值 
    for(int i=1; i<=n; i++)
        if(chg[i] > chg[ans])
            ans = i;
    cout<<ans<<endl; 
    return 0;
}


MT2143 线段树

难度:钻石    时间限制:1秒    占用内存:128M
题目描述

线段树模板题。已知一个数列,你需要进行下面两种操作:

  • 将某区间每一个数加上 k k k
  • 求出某区间每一个数的和。
格式

输入格式:第一行包含两个整数 n ,   m   ( 5 ≤ n , m ≤ 10 5 ) n,\ m\ (5\le n,m\le{10}^5) n, m (5n,m105),分别表示该数列数字的个数和操作的总个数;
     第二行包含 n n n 个用空格分隔的整数 ( 0 − 10 9 ) (0-{10}^9) (0109),其中第 i i i 个数字表示数列第 i i i 项的初始值;
     接下来 m m m 行每行包含 3 或 4 个整数,表示一个操作,具体如下:
     1 x y k :将区间 [x, y] 内每个数加上k。
     2 x y:输出区间 [x, y] 内的数的和。
输出格式:输出包含若干行整数,即为所有操作 2 的结果。

样例 1

输入:5 5
   1 5 4 2 3
   2 2 4
   1 2 3 2
   2 3 4
   1 1 5 1
   2 1 4

输出:11
   8
   20

备注

其中: 1 ≤ x ≤ y ≤ n ,   0 ≤ k ≤ 10 5 1\le x\le y\le n,\ 0\le k\le{10}^5 1xyn, 0k105


相关知识点:线段树


题解


这是一道纯模板题,下面直接给出完整代码:

/*
    MT2143 线段树
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
#define int long long // 有时候觉得ll麻烦,就可以用。但记得改signed main
struct NODE
{
    int l, r, val, lz; // lz为懒标记
} tree[4 * N];
int a[N];

void build(int p, int l, int r)
{
    tree[p].l = l, tree[p].r = r;
    if (l == r)
    {
        tree[p].val = a[l];
        return;
    }
    int mid = l + ((r - l) >> 1);
    build(p * 2, l, mid);
    build(p * 2 + 1, mid + 1, r);
    tree[p].val = tree[p * 2].val + tree[p * 2 + 1].val;
}
void lazy(int p, int v)
{
    int s = tree[p].l, t = tree[p].r;
    tree[p].val += (t - s + 1) * v, tree[p].lz += v;
}
void pushdown(int p)
{
    lazy(2 * p, tree[p].lz);
    lazy(2 * p + 1, tree[p].lz);
    tree[p].lz = 0;
}
// 带懒标记区间修改,[1,r]
// 为修改区间,p为当前节点编号,c为区间节点变化值,求和非求最值
void update(int l, int r, int c, int p)
{
    int s = tree[p].l, t = tree[p].r;
    if (l <= s && t <= r)
        return lazy(p, c);
    if (tree[p].lz && s != t)
        pushdown(p);
    int mid = s + ((t - s) >> 1);
    if (l <= mid)
        update(l, r, c, p * 2);
    if (r > mid)
        update(l, r, c, p * 2 + 1);
    tree[p].val = tree[p * 2].val + tree[p * 2 + 1].val;
}
// 带懒标记区间查询(区间求和),[L,r] 为修改区间,p为当前节点编号
int query(int l, int r, int p)
{
    int s = tree[p].l, t = tree[p].r;
    if (l <= s && t <= r)
        return tree[p].val;
    if (tree[p].lz)
        pushdown(p);
    int mid = s + ((t - s) >> 1), sum = 0;
    if (l <= mid)
        sum = query(l, r, p * 2);
    if (r > mid)
        sum += query(l, r, p * 2 + 1);
    return sum;
}

END


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM-Spring+SpringMVC+MyBatis框架的水果商城网站

项目介绍 主要功能&#xff1a; 前端用户购物端&#xff1a; ①角色信息&#xff1a;用户注册、用户登录、个人中心 ②个人中心&#xff1a;基本信息、我的订单、商品收藏、修改密码 ③首页管理&#xff1a;公告、留言、折扣大促销、热门商品 ④商品详情&#xff1a;收藏、加入…

使用阿里云OSS实现图片文件上传

说明&#xff1a;注册用户时&#xff0c;经常会用到上传头像。文件的上传/接收与一般文本数据不同。 一、创建Demo页面 先准备一个Demo页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>图片上传…

影响电磁铁磁力大小的因素有哪些

影响电磁铁磁力大小的因素主要有四个&#xff0c;一是缠绕在铁芯上线圈的圈数&#xff0c;二是线圈中电流的强度&#xff0c;三是缠绕的线圈与铁芯的距离&#xff0c;四是铁芯的大小形状。 首先要了解电磁铁的磁性是如何产生的&#xff0c;通电螺线管的磁场&#xff0c;由毕奥&…

总结895

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff09;…

JMM如何实现volatile写/读的内存语义

内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障&#xff0c;它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障&#xff08;其他类型的屏障不一定被所有处理器支持&#xff09;。执行该屏障开销会很昂贵&#xff0c;因为当前处理器通常要把写缓冲区中的数…

基于html+css的图展示112

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【图书推荐 | 13】后端系列

【赠书活动第十二期 】 图书推荐 本期书籍&#xff1a;后端系列 图书列表 本期图书列表&#xff1a; Spring Cloud 微服务快速上手项目驱动零起点学JavaNode.js 从基础到项目实战Diango Web 开发实例精解Flask Web 全栈开发实战精通Hadoopsmysql 数据库基础与实战应用Neo4j 图谱…

【Hive】安装配置及导入Hdfs数据

知识目录 一、写在前面&#x1f495;二、Hive的安装与配置✨2.1 Hive简介2.2 上传与解压2.3 拷贝MySQL驱动2.4 hive-site.xml文件2.5 启动hive 三、导入Hdfs数据到Hive✨3.1 修改Hadoop集群配置3.2 初始化3.3 创建表3.4 从Hdfs导入数据 四、总结撒花&#x1f60a; 一、写在前面…

MySQL-索引详解(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

Qt(C++)绘制指针仪表盘显示当前温度

一、功能介绍 当前文章要实现的功能: 使用Qt绘制一个仪表盘,用来显示当前的温度,绘制刻度、绘制数字、绘制温度指针。仪表盘全程使用QPainter进行绘制,QPainter是Qt框架中非常重要的一个类,绘制功能的实现离不开它。如果想要使用Qt进行高质量的绘图或UI设计,必须掌握QP…

Django新手必看:如何创建应用和定义数据表。(详细讲解)

Django新手必看&#xff1a;如何创建应用和定义数据表。 1. Django创建应用1.1 创建应用1.2 应用的添加 2. Django ORM2.1 定义数据表2.2 定义项目数据表2.3 通用字段选项2.4 外键使用2.5 应用数据库迁移 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &…

学习HCIP的day.11

目录 十一、BGP的属性 1、权重属性 2、本地优先级 3、as-path 4、起源属性 5、MED --多出口的鉴别属性 十二、BGP选路规则 十三、BGP的社团属性 十四、BGP的在MA网络中的下一跳问题 五、BGP的认证 十一、BGP的属性 BGP协议在选路时&#xff0c;先对比属性&#xf…

Java(30天拿下---第一天)

Java开发&#xff08;30天拿下---第一天&#xff09; 一 hello world以及JDK,JRE,JVM二 转义字符三 注释四 代码规范五 DOS命令&#xff08;了解&#xff09;六 变量1.加号的使用2.数据类型整型浮点型字符类型布尔类型自动类型转换强制类型转换String类型 七 API文档 一 hello …

ASP.NET Core Web API入门之一:创建新项目

ASP.NET Core Web API入门之一&#xff1a;创建新项目 一、引言二、创建新项目三、加入Startup类&#xff0c;并替换Program.cs内容四、编辑Program.cs代码五、修改控制器的路由六、运行项目 一、引言 最近闲着&#xff0c;想着没真正从0-1开发过ASP.NET Core Web API的项目&a…

softmax之温度系数

1.数学表示 这是传统的softmax&#xff1a; q i e x p ( z i ) ∑ j e x p ( z j ) q_i \frac{exp(z_i)}{\sum_jexp(z_j)} qi​∑j​exp(zj​)exp(zi​)​ 或者写&#xff1a; q i e x p ( z i ) / 1.0 ∑ j e x p ( z j / 1.0 ) q_i \frac{exp(z_i)/1.0}{\sum_jexp(z_j/…

七、进程地址空间

一、环境变量 &#xff08;一&#xff09;概念 环境变量(environment variables)&#xff1a;系统当中用做特殊用途的系统变量。 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可…

vue3---模板引用 nextTick

目录 模板引用--ref 访问模板引用 v-for 中的模板引用 函数模板引用 组件上的 ref 简单理解Vue中的nextTick 示例 二、应用场景 三、nextTick源码浅析 实战 --- vue3实现编辑与查看功能 模板引用--ref 虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作&…

LeetCode - 15 三数之和

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满…

Cmake工具的简单使用

引言 本篇文章讲述如何简单的使用cmake工具构建一个项目&#xff0c;帮助入门的c新手学会如何使用cmake. 我们在Clion新创建一个项目时&#xff0c;会发现&#xff0c;除了main.cpp文件之外&#xff0c;还存在一个build-debug目录和一个CMakelists.txt文件&#xff0c;如图: …

群晖 NAS 外网访问设置 - 腾讯 DNSPod

目录 ​编辑 一、使用DNSPod&#xff0c;实现DDNS&#xff08;动态域名&#xff09; 二、公共概念厘清 三、腾讯DNSPod上详细设置步骤 1. 打开DNSPod.cn网站并登录 2. 登录成功后&#xff0c;选择【我的域名】-> 【添加域名】 3. 添加群晖NAS需要二级域名&#xff08…