AtCoder Regular Contest 182 A~D

news2024/11/24 12:51:20

A.Chmax Rush!(枚举)

题意:

有一个长度为 N N N的整数序列 S S S。最初, S S S的所有元素都是 0 0 0

同时给你两个长度为 Q Q Q的整数序列: P = ( P 1 , P 2 , … , P Q ) P=(P_1,P_2,\dots,P_Q) P=(P1,P2,,PQ) V = ( V 1 , V 2 , … , V Q ) V=(V_1,V_2,\dots,V_Q) V=(V1,V2,,VQ)

斯努克希望依次对序列 S S S执行 Q Q Q次操作。第 i i i个操作如下:

  • 执行以下操作之一:
    • 将每个元素 S 1 , S 2 , … , S P i S_1,S_2,\dots,S_{P_i} S1,S2,,SPi替换为 V i V_i Vi。但是,在执行此操作前,如果 S 1 , S 2 , … , S P i S_1,S_2,\dots,S_{P_i} S1,S2,,SPi中存在严格大于 V i V_i Vi的元素,斯努克就会开始哭泣。
    • 将每个元素 S P i , S P i + 1 , … , S N S_{P_i},S_{P_i+1},\dots,S_N SPi,SPi+1,,SN替换为 V i V_i Vi。但是,在此操作之前,如果 S P i , S P i + 1 , … , S N S_{P_i},S_{P_i+1},\dots,S_N SPi,SPi+1,,SN中有元素严格大于 V i V_i Vi,斯努克就会开始哭泣。

求在 Q Q Q的操作序列中,斯努克可以在不哭泣的情况下完成所有操作的次数,答案对 998244353 998244353 998244353取模。

当且仅当有 1 ≤ i ≤ Q 1\leq i\leq Q 1iQ使得第 i i i次操作的选择不同时,两个操作序列是不同的。

分析:

考虑对于任意一个 i < j i\lt j i<j,如果 V i > V j V_i>V_j Vi>Vj,那么 i i i j j j就会互相干扰。

如果 P i = P j P_i = P_j Pi=Pj,那么 j j j不管怎么选操作最后在 P i P_i Pi这个点都会出现 S P i > V j S_{P_i} > V_j SPi>Vj的现象,此时答案为 0 0 0

如果 P i ≠ P j P_i \neq P_j Pi=Pj,那么让 P P P小的那个执行操作 1 → P 1 \rightarrow P 1P,大的那个 P → n P \rightarrow n Pn

记录一个方向数组,如果 s d i = 1 sd_i=1 sdi=1代表必须往 n n n操作, s d i = − 1 sd_i=−1 sdi=1代表必须往 1 1 1操作, s d i = 0 sd_i=0 sdi=0代表无约束,枚举 i , j i,j i,j即可,如果出现既要一个操作向左又要向右也是无解的。

答案统计就遍历 1 → Q 1 \rightarrow Q 1Q a n s ans ans初始设为 1 1 1,如果 s d i = 0 sd_i = 0 sdi=0就把答案乘 2 2 2

代码:

#include<bits/stdc++.h>

using namespace std;
const int mod = 998244353;
const int N = 5005;
int P[N], V[N];
int n, q, sd[N], ans = 1;

int main() {
    cin >> n >> q;
    for (int i = 1; i <= q; i++) {
        cin >> P[i] >> V[i];
    }
    for (int j = 1; j <= q; j++) {
        for (int i = j + 1; i <= q; i++) {
            if (V[i] >= V[j])
                continue;
            if (P[i] == P[j]) {
                cout << 0;
                return 0;
            }
            if (P[j] < P[i]) {
                if (sd[i] && sd[i] != 1) {
                    cout << 0;
                    return 0;
                }
                if (sd[j] && sd[j] != -1) {
                    cout << 0;
                    return 0;
                }
                sd[j] = -1, sd[i] = 1;
            } else {
                if (sd[i] && sd[i] != -1) {
                    cout << 0;
                    return 0;
                }
                if (sd[j] && sd[j] != 1) {
                    cout << 0;
                    return 0;
                }
                sd[j] = 1, sd[i] = -1;
            }
        }
    }
    for (int i = 1; i <= q; i++)
        ans = ans * ((1 + (sd[i] == 0))) % mod;
    cout << ans << endl;
    return 0;
}

B.|{floor(A_i/2^k)}|(构造)

题意:

给你正整数 N N N K K K

长度为 N N N的整数序列,其中所有元素都在 1 1 1 2 K − 1 2^K-1 2K1之间(含),称为良好序列

良好序列 A = ( A 1 , A 2 , … , A N ) A=(A_1,A_2,\ldots,A_N) A=(A1,A2,,AN)得分定义如下:

  • 使用介于 1 1 1 N N N(含)之间的整数 i i i和非负整数 k k k可以表示为 ⌊ A i 2 k ⌋ \displaystyle\left\lfloor\frac{A_i}{2^k}\right\rfloor 2kAi的不同整数的个数。

例如,对于 A = ( 3 , 5 ) A=(3,5) A=(3,5),五个整数可以表示为 ⌊ A i 2 k ⌋ \displaystyle \left\lfloor\frac{A_i}{2^k}\right\rfloor 2kAi 0 0 0 1 1 1 2 2 2 3 3 3 5 5 5,因此得数为 5 5 5

找出一个得分最高的好序列。

每个输入文件都有 T T T个测试用例需要解决。

分析:

看到除以 2 k 2^k 2k,联想到与位运算有关,想要得到更多的分数那么右移后得到的数就要越多,所以需要构造出更多不同的二进制下位数不超过 k k k的数。

从最高位开始,使用类似线段树建树的方式,每次为左边的区间按位或上 1 1 1,右边的区间不进行处理。 k k k 0 0 0时直接结束,若递归到叶子节点时未满 k k k位,后面全部填 1 1 1即可。这样二分着构造出来的所有数均不同且不断右移后能得到更多的结果。

代码:

#include<bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;
int ans[N << 1];

void solve(int l, int r, int k) {
    if (!k)
        return;
    if (l == r) {
        while (k--)
            ans[l] = (ans[l] << 1) + 1;
        return;
    }
    int mid = (l + r) >> 1;
    for (int i = l; i <= mid; i++)
        ans[i] = (ans[i] << 1) + 1;
    for (int i = mid + 1; i <= r; i++)
        ans[i] <<= 1;
    solve(l, mid, k - 1);
    solve(mid + 1, r, k - 1);
}

int n, k;

int main() {
    int T;
    cin >> T;
    while (T--) {
        cin >> n >> k;
        for (int i = 1; i <= n; i++)
            ans[i] = 1;
        solve(1, n, k - 1);
        for (int i = 1; i <= n; i++)
            cout << ans[i] << " ";
        cout << endl;
    }
    return 0;
}

C.Sum of Number of Divisors of Product(数学)

题意:

长度在 1 1 1 N N N之间(含)的整数序列,其中每个元素的长度在 1 1 1 M M M之间(含),称为好序列

好序列的分数定义为 X X X的正除数,其中 X X X是序列中各元素的乘积。

好序列有 ∑ k = 1 N M k \displaystyle\sum_{k=1}^{N}M^k k=1NMk个。求所有这些序列的分数之和对 998244353 998244353 998244353取模的结果。

分析:

m ≤ 16 m≤16 m16,先找出所有质数 2 , 3 , 5 , 7 , 11 , 13 2,3,5,7,11,13 2,3,5,7,11,13,一共有 6 6 6个,考虑状压也只有 64 64 64

进一步发现 n n n巨大,但是状压状态很少,可以想到矩阵快速幂。考虑怎么构造原 D P DP DP序列和矩阵进行转移:

首先要求对于每个长度求和所以肯定要设一维来统计前缀和。

其次我们写出转移,并构造转移矩阵:发现如果设“某一状态为某一质数有没有”无法转移,所以我们先令第 i ( 0 ≤ i < 6 ) i(0≤i<6) i(0i<6)个质数的编号为 i i i,个数为 a i a_i ai a i = 0 a_i=0 ai=0表示没有这个质数),则显然一个序列的答案为 ( a 0 + 1 ) ( a 1 + 1 ) ( a 2 + 1 ) ( a 3 + 1 ) ( a 4 + 1 ) ( a 5 + 1 ) (a_0+1)(a_1+1)(a_2+1)(a_3+1)(a_4+1)(a_5+1) (a0+1)(a1+1)(a2+1)(a3+1)(a4+1)(a5+1)而如果我们在序列末尾加入一个 6 6 6则答案就变成 ( a 0 + 2 ) ( a 1 + 2 ) ( a 2 + 1 ) ( a 3 + 1 ) ( a 4 + 1 ) ( a 5 + 1 ) (a_0+2)(a_1+2)(a_2+1)(a_3+1)(a_4+1)(a_5+1) (a0+2)(a1+2)(a2+1)(a3+1)(a4+1)(a5+1)

根据 c ( a + x ) ( b + y ) = c ( a b + a y + b x + x y ) c(a+x)(b+y)=c(ab+ay+bx+xy) c(a+x)(b+y)=c(ab+ay+bx+xy),设 c = ( a 2 + 1 ) ( a 3 + 1 ) ( a 4 + 1 ) ( a 5 + 1 ) c=(a_2+1)(a_3+1)(a_4+1)(a_5+1) c=(a2+1)(a3+1)(a4+1)(a5+1)原式子即为: ( a 0 + 2 ) ( a 1 + 2 ) c = ( a 0 + 1 ) ( a 1 + 1 ) c + ( a 0 + 1 ) c + ( a 1 + 1 ) c + c (a_0+2)(a_1+2)c=(a_0+1)(a_1+1)c+(a_0+1)c+(a_1+1)c+c (a0+2)(a1+2)c=(a0+1)(a1+1)c+(a0+1)c+(a1+1)c+c

设某一状态 f S f_S fS表示 ( a i + 1 ) ( a j + 1 ) ( a k + 1 ) ⋯ ( a l + 1 ) , ( i , j , k , … , l ∈ S ) (a_i+1)(a_j+1)(a_k+1)⋯(a_l+1),(i,j,k,…,l\in S) (ai+1)(aj+1)(ak+1)(al+1),(i,j,k,,lS)的和。

那么转移过程就变成我们枚举每一位和 [ 1 , m ] [1,m] [1,m]间的每一位数字,来看看对于原序列的系数是多少,然后给转移矩阵增加即可,因为一个数字最多有两个不同的质数,找两个变量记录一下即可。

式子形如: f S = f S + f S − i + f S − j + f S − i − j f_S=f_S+f_{S−{i}}+f_{S−{j}}+f_{S−{i}−{j}} fS=fS+fSi+fSj+fSij

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL N = 66;
const LL mod = 998244353;

struct Matrix {
    LL n, m, num[N][N];

    Matrix() {
        n = m = 0;
        memset(num, 0, sizeof(num));
    }
};

Matrix operator*(const Matrix &x, const Matrix &y) {
    Matrix c;
    c.n = x.n;
    c.m = y.m;
    for (LL i = 0; i < x.n; i++)
        for (LL j = 0; j < y.m; j++)
            for (LL k = 0; k < x.m; k++)
                (c.num[i][j] += x.num[i][k] * y.num[k][j] % mod) %= mod;
    return c;
}

Matrix ksm(Matrix a, LL b) {
    Matrix t;
    t.n = t.m = a.n;
    for (LL i = 0; i < a.n; i++)t.num[i][i] = 1;
    for (; b; b >>= 1, a = a * a)if (b & 1)t = t * a;
    return t;
}

LL n, m;
LL id[17];
Matrix a, b;

int main() {
    id[2] = 1;
    id[3] = 2;
    id[5] = 3;
    id[7] = 4;
    id[11] = 5;
    id[13] = 6;
    cin >> n >> m;
    a.n = 1, a.m = 65;
    for (LL i = 0; i < 64; i++)
        a.num[0][i] = 1;
    b.n = b.m = 65;
    b.num[64][64] = b.num[63][64] = 1;
    for (LL i = 0; i < 64; i++)
        for (LL k = 1; k <= m; k++) {
            LL t = k, t1 = -1, t2 = -1, s1 = 0, s2 = 0;
            for (LL l = 2; l <= t; l++)
                if (t % l == 0) {
                    if (~t1) {
                        t2 = id[l] - 1;
                        while (t % l == 0)t /= l, s2++;
                    } else {
                        t1 = id[l] - 1;
                        while (t % l == 0)t /= l, s1++;
                    }
                }
            b.num[i][i]++;
            if (t1 >= 0 && (i >> t1 & 1))b.num[i ^ (1 << t1)][i] += s1;
            if (t2 >= 0 && (i >> t2 & 1))b.num[i ^ (1 << t2)][i] += s2;
            if (t1 >= 0 && (i >> t1 & 1) && t2 >= 0 && (i >> t2 & 1))b.num[i ^ (1 << t1) ^ (1 << t2)][i] += s1 * s2;
        }
    a = a * ksm(b, n + 1);
    cout << a.num[0][64] - 1 << endl;
    return 0;
}

D.Increment Decrement Again(思维)

题意:

没有两个相邻元素相同的整数序列称为良好序列

给你两个长度为 N N N的良好序列: A = ( A 1 , A 2 , … , A N ) A=(A_1,A_2,\dots,A_N) A=(A1,A2,,AN) B = ( B 1 , B 2 , … , B N ) B=(B_1,B_2,\dots,B_N) B=(B1,B2,,BN) A A A B B B中的每个元素都介于 0 0 0 M − 1 M-1 M1之间。

您可以对 A A A执行以下任意次数的运算,可能为零次:

  • 1 1 1 N N N之间选择一个整数 i i i,并执行以下操作之一:
    • A i ← ( A i + 1 )   m o d   M A_i\leftarrow(A_i+1)\bmod M Ai(Ai+1)modM
    • A i ← ( A i − 1 )   m o d   M A_i\leftarrow(A_i-1)\bmod M Ai(Ai1)modM。此处为 ( − 1 )   m o d   M = M − 1 (-1)\bmod M=M-1 (1)modM=M1

但是,不能进行使 A A A不再是一个好序列的操作。

判断是否有可能使 A A A等于 B B B,如果有可能,求这样做所需的最小运算次数。

分析:

先特判 m = 2 m=2 m=2

然后我们看作 A A A不对 m m m取模,要求变为 ∀ i < n \forall i\lt n i<n ∣ a i − a i + 1 ∣ < m ∧ a i ≠ a i + 1 |a_i−a_{i+1}|\lt m∧a_i≠a_{i+1} aiai+1<mai=ai+1

可以发现 a a a的大小关系是不会变的,所以如果固定了 a 1 ′ a^′_1 a1,则后面的都是固定的。可以先令 a 1 ′ = b 1 a^′_1=b_1 a1=b1,根据大小关系求出任意一组合法的 a ′ a^′ a,接下来问题变为最小化 ∑ i = 1 n ∣ a i − a i ′ − k m ∣ \sum\limits^n_{i=1}|a_i−a^′_i−km| i=1naiaikm,可以二分类似找中位数的方法解决。复杂度 O ( n l o g n l o g V ) O(nlognlogV) O(nlognlogV)

代码:

#include<bits/stdc++.h>

typedef long long LL;
const LL inf = 0x3f3f3f3f;
using namespace std;

LL n, m, L, R, mid, p, a[200010], b[200010], c[200010];

int main() {
    cin >> n >> m;
    for (LL i = 1; i <= n; ++i)
        cin >> a[i];
    for (LL i = 1; i <= n; ++i)
        cin >> b[i];
    if (m == 2) {
        if (a[1] == b[1])
            cout << "0" << endl;
        else
            cout << "-1" << endl;
        return 0;
    }
    c[1] = b[1];
    for (LL i = 2; i <= n; ++i) {
        LL val = (b[i] - b[i - 1] + m) % m;
        if (a[i] > a[i - 1])
            c[i] = c[i - 1] + val;
        else
            c[i] = c[i - 1] + val - m;
    }
    for (LL i = 1; i <= n; ++i)
        c[i] = a[i] - c[i];
    sort(c + 1, c + 1 + n);
    L = -1000 * inf;
    R = 1000 * inf;
    while (L < R) {
        mid = L + ((R - L + 1) >> 1);
        p = lower_bound(c + 1, c + 1 + n, mid * m) - c;
        if (p <= (n + 1) / 2)
            L = mid;
        else
            R = mid - 1;
    }
    LL ans = 0, s = 0;
    for (LL i = 1; i <= n; ++i)
        ans += abs(c[i] - L * m);
    for (LL i = 1; i <= n; ++i)
        s += abs(c[i] - (L + 1) * m);
    cout << min(ans, s) << endl;
    return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI产品经理修炼指南:从青铜到王者的逆袭之路

一、AI通识 1.1 AI产业结构 AI发展至今大致按照在产业结构上的分工不同产生了三种类型的公司&#xff0c;我们在转型时最好要先明确自己的优势及兴趣&#xff0c;来判断自己适合着眼于哪个层面的工作&#xff0c;从而进行针对性的学习和提升。 &#xff08;1&#xff09;行业…

Apache Flink细粒度资源管理原理

粗粒度资源管理 Apache Flink 1.1.4版本之前使用的是粗粒度的资源管理&#xff0c;即每个算子Slot Request所需要的资源都是未知的&#xff0c;Flink内部用UNKNOWN的特殊值来表示&#xff0c;这个值可以和任意资源规则的物理Slot匹配&#xff0c;站在Taskmanager的角度&#x…

打卡学习Python爬虫第二天|Web请求过程刨析

一、服务器渲染 服务器端渲染&#xff08;Server-Side Rendering&#xff0c;简称SSR&#xff09;是一种网页渲染技术。在这种技术中&#xff0c;服务器在接收到客户端的请求后&#xff0c;会生成页面的初始HTML内容&#xff0c;并将其发送给客户端。客户端浏览器接收到这些HT…

什么是BKP(备份寄存器)

一&#xff0c;什么是BKP 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT维持供电。当系统在待机模式下被唤醒&#xff0c;或系统复位或电源复位时&#xff0c;他们也…

数据结构(6.2_2)——领接表法

领接表法&#xff08;顺序存储链式存储&#xff09; 代码&#xff1a; #define MaxVertextNum 10 //边(弧) typedef struct ArcNode {int adjvex;//边/弧指向哪个结点struct ArcNode* next;//指向下一条弧的指针//InfoType info;//边权值 }ArcNode; //顶点 typedef struct VNo…

小阿轩yx-Docker Swarm 管理

小阿轩yx-Docker Swarm 管理 容器编排部署工具 除 Google 推出的 Kubernetes 之外&#xff0c;还有 Docker 发布的 Swarm 与 Mesos 推出的 Marathon 案例一 Docker Swarm 群集部署 Docker 自诞生以来&#xff0c;容器特性以及镜像特性给 DevOps 爱好者带来很多方便很长时间…

基本数据统计分析上|集中位置统计量|分散程度统计量|分布形状统计量|常见概率分布

数据统计分析 现实生活中的许多数据都是随机产生的&#xff0c;如考试分数&#xff0c;月降雨量&#xff0c;灯泡寿命等。从统计角度来看&#xff0c;这些数据其实都是符合某种分布的&#xff0c;这种分布就是统计规律性 在数学建模过程中经常与数据打交道&#xff0c;需要进行…

【鸟哥的Linux私房菜(七)之文件IO】

文章目录 C语言文件IOC语言文件接口汇总什么是当前路径&#xff1f;默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配规则重定向重定向的原理dup2添加重定向功能到minishell FILEF…

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这…

vue3中引入插件报ts报错Could not find a declaration file for module

引入第三方组件时&#xff0c;下载了组件还是报ts错误Could not find a declaration file for module 解决办法 1. 下载这个插件的ts库&#xff08;有的没有ts库就用下面这种方式&#xff09; 2. 在src下创建一个shims-vue.d.ts文件&#xff08;简单直接&#xff0c;我用的这种…

DNS域名解析服务理论详解(域名结构、递归查询和迭代查询、CDN)

文章目录 DNS域名解析服务1.DNS系统的概念2.DNS系统的主要作用3.DNS的分布式数据结构和域名的结构4.DNS服务器类型4.1三种类型4.2分布式数据库4.3名词解释 5.CDN技术5.1CDN的基本原理5.2CDN的主要功能 6.DNS查询类型及原理6.1查询方式6.2查询原理过程6.3本地主机的DNS映射文件 …

基于Hadoop的物品租赁系统的设计与实现 9349a--论文

TOC springboot344基于Hadoop的物品租赁系统的设计与实现 9349a--论文 绪 论 1.1开发背景 随着网络的飞速发展&#xff0c;网络技术的应用越来越广泛&#xff0c;而信息技术的飞速发展&#xff0c;计算机管理系统的优势也逐渐体现出来&#xff0c;大量的计算机电子信息已经…

Python | 数据处理中常用的数据分布介绍

数据分布是指数据在统计图中的形状和特征&#xff0c;即数据取值的统计规律。在统计学中&#xff0c;数据分布是描述数据集中数值分布情况和规律的重要工具。通过数据分布&#xff0c;可以了解数据的集中程度、分散程度、偏态和峰态等信息&#xff0c;进而对数据进行合理的分析…

95后医疗行业女性转型记:如何成功踏入人工智能项目管理领域

分享目录 一、自我介绍&#xff0c;给大家分享一下拿到offer的心情吧 二、在整个求职转型陪跑营里&#xff0c;你收获最大的三个点是什么&#xff1f; 三、求职转行过程中&#xff0c;你遇到了哪些困难&#xff1f;七芊老师和强哥是怎么帮助你的&#xff1f;你是怎么走过来的…

Bellman_ford算法

使用Dijikstra算法求最短路问题&#xff0c;要求图中不能存在负长度的边&#xff0c;也就是负权边 为什么Dijikstra算法不能用来求含有负权边的图中的最短路问题&#xff1f; Bellman_ford算法 mention&#xff08;1&#xff09;&#xff1a; 没有挑选路径长度距离编号 1 结…

[Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅的总结

0. 引言&#xff1a; 在人工智能飞速发展的今天&#xff0c;掌握大模型微调技能对于从事 AI 研究和开发的专业人士来说至关重要。因此&#xff0c;Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅&#xff1b;顺便参加了星火大模型驱动阅读理解题库构建挑战赛。 1. …

XSS--DOM破坏案例与靶场

靶场连接https://xss.pwnfunction.com/challenges/ 目录 Ma SPaghet! Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok,Boomer Ma SPaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHT…

【嵌入式开发 Linux 常用命令系列 4.5 -- 去除 git diff 时出现的 ^M】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 去除 git diff 时出现的 ^Mgit config --global core.whitespace cr-at-eol选项解释 为什么使用 cr-at-eol如何配置使用示例纠正行尾回车符Sumamry 去除 git diff 时出现的 ^M git config --global core.whitespace cr-at-eol …

day23 Java基础——数组详解

day23 Java基础——数组(array) 文章目录 day23 Java基础——数组(array)1. 数组的概述2. 数组的声明和创建2.1 声明数组2.2 创建数组2.3 内存分析2.4 数组的三种初始化静态初始化动态初始化数组的默认初始化 3. 数组的使用3.1 访问数组元素3.2 数组的遍历3.3 数组的复制3.4 数…

微服务通过nacos实现动态路由

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…