AtCoder Regular Contest 178 A~D

news2024/10/7 20:36:51

A.Good Permutation 2(贪心)

题意:

给你一个正整数 N N N和一个由 M M M个正整数 A = ( A 1 , A 2 , … , A M ) A=(A_{1},A_{2}, \dots,A_{M}) A=(A1,A2,,AM)组成的序列。

在这里, A A A的所有元素都是介于 1 1 1 N N N之间的不同整数。

对于所有整数 i i i 1 ≤ i ≤ M 1\leq i\leq M 1iM)满足以下条件时, ( 1 , 2 , … , N ) (1,2,\dots,N) (1,2,,N)的排列 P = ( P 1 , P 2 , … , P N ) P=(P_{1},P_{2},\dots,P_{N}) P=(P1,P2,,PN)称为好排列

  • P P P的任何连续子序列都不是 ( 1 , 2 , … , A i ) (1,2,\dots,A_{i}) (1,2,,Ai)的置换。

判断是否存在好的排列,如果存在,求字典序最小的好的排列

分析:

本题考虑贪心思维。

将答案数组赋初值为 1 , 2 , . . . , n 1,2,...,n 1,2,...,n,将约束条件 a i a_i ai从小到大排序。

对于每一个 x ∈ a x\in a xa,因为每一个排列必须包含 1 1 1,所以就让 r e s 1 , r e s 2 . . . , r e s x res_1,res_2...,res_x res1,res2...,resx不是一个排列。

每次交换 r e s x res_x resx r e s x + 1 res_{x+1} resx+1可以保证符合要求,且字典序最小。

考虑无解的情况。

  • 如果 a = n a=n a=n,则对于整个答案排列,一定是一个不符合这一要求的。
  • 如果 a = 1 a=1 a=1,则对于答案中子序列{1},同样无法满足。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1000005;
int a[N], b[N];

int main() {
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
        cin >> a[i];
    sort(a + 1, a + 1 + m);
    if (a[m] == n || a[1] == 1) {
        cout << "-1" << endl;
        return 0;
    }
    set<int> st;
    for (int i = 1; i <= n; i++)
        st.insert(i);
    for (int i = 1; i <= m; i++) {
        b[a[i]] = a[i] + 1;
        st.erase(a[i] + 1);
    }
    for (int i = 1; i <= n; i++) {
        if (b[i] == 0) {
            b[i] = *st.begin();
            st.erase(st.begin());
        }
    }
    for (int i = 1; i <= n; i++)
        cout << b[i] << " ";
    cout << endl;
    return 0;
}

B.1 + 6 = 7(数学)

题意:

给你正整数 A 1 , A 2 , A 3 A_{1},A_{2},A_{3} A1,A2,A3。求满足以下所有条件的正整数 ( X 1 , X 2 , X 3 ) (X_{1},X_{2},X_{3}) (X1,X2,X3)元组的个数,答案对 998244353 998244353 998244353取模。

  • X 1 X_{1} X1是一个十进制符号为 A 1 A_{1} A1位的正整数。
  • X 2 X_{2} X2是一个十进制符号为 A 2 A_{2} A2位的正整数。
  • X 3 X_{3} X3是一个十进制符号为 A 3 A_{3} A3位的正整数。
  • X 1 + X 2 = X 3 X_{1}+X_{2}=X_{3} X1+X2=X3

每个输入给出 T T T个测试样例,请逐一求解。

分析:

f ( B 1 , B 2 , B 3 ) f(B_{1},B_{2},B_{3}) f(B1,B2,B3)表示下面证明的答案。

考虑有多少对整数 ( Y 1 , Y 2 ) (Y_{1},Y_{2}) (Y1,Y2)满足以下所有条件?

  • 1 0 B 1 ≤ Y 1 10^{B_{1}}\leq Y_{1} 10B1Y1
  • 1 0 B 2 ≤ Y 2 10^{B_{2}}\leq Y_{2} 10B2Y2
  • Y 1 + Y 2 < 1 0 B 3 Y_{1}+Y_{2}\lt 10^{B_{3}} Y1+Y2<10B3

我们要找出满足以下所有条件的整数对 ( X 1 , X 2 ) (X_{1},X_{2}) (X1,X2)的个数:

  • 1 0 A 1 − 1 ≤ X 1 10^{A_{1}-1}\leq X_{1} 10A11X1
  • 1 0 A 2 − 1 ≤ X 2 10^{A_{2}-1}\leq X_{2} 10A21X2
  • X 1 + X 2 < 1 0 A 3 X_{1}+X_{2}\lt 10^{A_{3}} X1+X2<10A3
  • 1 0 A 1 ≤ X 1 10^{A_{1}}\leq X_{1} 10A1X1成立
  • 1 0 A 2 ≤ X 2 10^{A_{2}}\leq X_{2} 10A2X2成立
  • X 1 + X 2 < 1 0 A 3 − 1 X_{1}+X_{2}\lt 10^{A_{3}-1} X1+X2<10A31成立

利用包含-排除原则,这个问题的答案可以用 f f f表示如下:
∑ i = 0 1 ∑ j = 0 1 ∑ k = 0 1 f ( A 1 − i , A 2 − j , A 3 − k ) ( − 1 ) i + j + k \sum_{i=0}^{1}\sum_{j=0}^{1}\sum_{k=0}^{1}f(A_{1}-i,A_{2}-j,A_{3}-k)(-1)^{i+j+k} i=01j=01k=01f(A1i,A2j,A3k)(1)i+j+k

因此,只需实现一个能快速计算 f ( B 1 , B 2 , B 3 ) f(B_{1},B_{2},B_{3}) f(B1,B2,B3)的函数即可。对于 f ( B 1 , B 2 , B 3 ) f(B_{1},B_{2},B_{3}) f(B1,B2,B3),以下条件成立:

  • B 3 ≤ max ⁡ ( B 1 , B 2 ) B_{3}\leq\max(B_{1},B_{2}) B3max(B1,B2),则 f ( B 1 , B 2 , B 3 ) = 0 f(B_{1},B_{2},B_{3})=0 f(B1,B2,B3)=0
  • B 3 > max ⁡ ( B 1 , B 2 ) B_{3}\gt \max(B_{1},B_{2}) B3>max(B1,B2),则 f ( B 1 , B 2 , B 3 ) = ( 1 0 B 3 − 1 0 B 1 − 1 0 B 2 ) ( 1 0 B 3 − 1 0 B 1 − 1 0 B 2 + 1 ) 2 f(B_{1},B_{2},B_{3})= \dfrac{(10^{B_{3}}-10^{B_{1}}-10^{B_{2}})(10^{B_{3}}-10^{B_{1}}-10^{B_{2}}+1)}{2} f(B1,B2,B3)=2(10B310B110B2)(10B310B110B2+1)

由上可知, f ( B 1 , B 2 , B 3 ) f(B_{1},B_{2},B_{3}) f(B1,B2,B3)可在 O ( log ⁡ ( B 3 ) ) O(\log(B_{3})) O(log(B3))时间内计算,因此每个测试样例可在 O ( log ⁡ ( A 3 ) ) O(\log(A_{3})) O(log(A3))时间内解决此问题。

代码:

#include<bits/stdc++.h>
using namespace std;
#include<atcoder/modint>
using mint = atcoder::modint998244353;
mint ten = 10;

mint f(int b1, int b2, int b3){
    if (max(b1, b2) >= b3) return 0;
    mint tmp = ten.pow(b3) - ten.pow(b1) - ten.pow(b2);
    return tmp * (tmp + 1) / 2;
}

int main(){
    int T;
    cin >> T;
    while(T--){
        int a1, a2, a3;
        cin >> a1 >> a2 >> a3;
        mint ans = 0, pm = 1;
        for (int i = 0; i < 2; i++){
            for (int j = 0; j < 2; j++){
                for (int k = 0; k < 2; k++){
                    ans += pm * f(a1 - i, a2 - j, a3 - k);
                    pm *= -1;
                }
                pm *= -1;
            }
            pm *= -1;
        }
        cout << ans.val() << endl;
    }
}

C.Sum of Abs 2(数学、动态规划)

题意:

问题陈述

给你正整数 N N N L L L以及长度为 N N N的正整数序列 A = ( A 1 , A 2 , … , A N ) A=(A_{1},A_{2},\dots,A_{N}) A=(A1,A2,,AN)

就每个 i = 1 , 2 , … , N i=1,2,\dots,N i=1,2,,N回答下面的问题:

判断是否存在一个由 L L L个非负整数 B = ( B 1 , B 2 , … , B L ) B=(B_{1},B_{2},\dots,B_{L}) B=(B1,B2,,BL)组成的序列,使得 ∑ j = 1 L − 1 ∑ k = j + 1 L ∣ B j − B k ∣ = A i \displaystyle\sum_{j=1}^{L-1}\sum_{k=j+1}^{L}|B_{j}-B_{k}|=A_{i} j=1L1k=j+1LBjBk=Ai。如果存在,求该序列 max ⁡ ( B ) \max(B) max(B)的最小值 B B B

分析:

本题"绝对值之和"指的是以下公式:

∑ j = 1 L − 1 ∑ k = j + 1 L ∣ B j − B k ∣ \sum_{j=1}^{L - 1}\sum_{k = j + 1} ^ {L} |B_{j} - B_{k}| j=1L1k=j+1LBjBk

当存在 B B B时,能够最小化 max ⁡ ( B ) \max(B) max(B) B B B满足以下两个条件:

  • B B B按升序排序。
  • B 1 = 0 B_{1}=0 B1=0.

第一个条件成立的原因是,绝对值之和与 B B B的顺序无关。第二个条件成立是因为如果 B B B中的所有元素都是正数,那么从所有元素中减去 1 1 1就可以减少 max ⁡ ( B ) \max(B) max(B)而不改变绝对值之和。

B B B按升序排序时,绝对值之和可以表示如下:

∑ j = 1 L − 1 ∑ k = j + 1 L ∣ B j − B k ∣ = ∑ j = 1 L − 1 ∑ k = j + 1 L ( B k − B j ) = ∑ k = 1 L − 1 k ( L − k ) ( B k + 1 − B k ) \sum_{j=1}^{L-1}\sum_{k=j+1}^{L}|B_{j}-B_{k}|=\sum_{j=1}^{L-1}\sum_{k=j+1}^{L}(B_{k}-B_{j})=\sum_{k=1}^{L-1}k(L-k)(B_{k+1}-B_{k}) j=1L1k=j+1LBjBk=j=1L1k=j+1L(BkBj)=k=1L1k(Lk)(Bk+1Bk)

这个变换是正确的,因为满足 1 ≤ b < a ≤ L 1\leq b\lt a\leq L 1b<aL 的整数 a , b a,b a,b B a − B b = ( B a − B a − 1 ) + ( B a − 1 + B a − 2 ) + ⋯ + ( B b + 1 − B b ) B_{a}-B_{b}=(B_{a}-B_{a-1})+(B_{a-1}+B_{a-2})+\cdots+(B_{b+1}-B_{b}) BaBb=(BaBa1)+(Ba1+Ba2)++(Bb+1Bb),满足 b ≤ k b\leq k bk k + 1 ≤ a k+1\leq a k+1a的整数对 ( a , b ) (a,b) (a,b)的个数为 k ( L − k ) k(L-k) k(Lk)

如果我们让 C k = B k + 1 − B k C_{k}=B_{k+1}-B_{k} Ck=Bk+1Bk,那么当 B B B按升序排序和 B 1 = 0 B_{1}=0 B1=0时,下面的情况成立:

  • 0 ≤ C k 0\leq C_{k} 0Ck.
  • 绝对值之和等于 ∑ k = 1 L − 1 k ( L − k ) C k \displaystyle\sum_{k=1}^{L-1}k(L-k)C_{k} k=1L1k(Lk)Ck
  • max ⁡ ( B ) = B L = ∑ k = 1 L − 1 C k \displaystyle\max(B)=B_{L}=\sum_{k=1}^{L-1}C_{k} max(B)=BL=k=1L1Ck.

因此,我们需要解决下面的问题:

确定是否存在长度为 L − 1 L-1 L1的非负整数序列 C C C,使得 ∑ k = 1 L − 1 k ( L − k ) C k = A i \displaystyle\sum_{k=1}^{L-1}k(L-k)C_{k}=A_{i} k=1L1k(Lk)Ck=Ai,如果存在,求这样的 C C C的最小和。

这个问题可以用动态规划的思想来解决,方法与背包问题相同,可以同时计算所有 i i i的和。

由于 C k = 0 C_{k}=0 Ck=0对于满足 max ⁡ ( A ) < k ( L − k ) \max(A)\lt k(L-k) max(A)<k(Lk) k k k总是成立的,解法的空间复杂度为 O ( max ⁡ ( A ) ) O(\max(A)) O(max(A)),时间复杂度为 O ( N + max ⁡ ( A ) max ⁡ ( A ) ) O(N+\max(A)\sqrt{\max(A)}) O(N+max(A)max(A) )

代码:

#include<bits/stdc++.h>

using namespace std;

int main() {
    int N, L;
    cin >> N >> L;
    const int S = 200200;
    vector<int> dp(S, S);
    dp[0] = 0;
    for (int k = 1; k < L; k++) {
        int w = k * (L - k);
        if (S < w)
            break;
        for (int i = 0; i + w < S; i++) {
            dp[i + w] = min(dp[i + w], dp[i] + 1);
        }
    }
    while (N--) {
        int a;
        cin >> a;
        cout << (dp[a] == S ? -1 : dp[a]) << endl;
    }
    return 0;
}

D.Delete Range Mex(动态规划)

题意:

给你一个正整数 N N N和一个由 M M M非负整数 A = ( A 1 , A 2 , … , A M ) A=(A_{1},A_{2},\dots,A_{M}) A=(A1,A2,,AM)组成的序列。

在这里, A A A的所有元素都是介于 0 0 0 N − 1 N-1 N1之间的不同整数。

求满足以下条件的 ( 0 , 1 , … , N − 1 ) (0,1,\dots,N-1) (0,1,,N1)的排列 P P P 998244353 998244353 998244353取模的个数。

  • 将序列 B = ( B 1 , B 2 , … , B N ) B=(B_{1},B_{2},\dots,B_{N}) B=(B1,B2,,BN)初始化为 P P P后,重复下面的操作若干次,可以得到 B = A B = A B=A
    • 选择 l l l r r r,使得 1 ≤ l ≤ r ≤ ∣ B ∣ 1\leq l\leq r\leq|B| 1lrB,如果 B B B中包含 m e x ( { B l , B l + 1 , … , B r } ) \mathrm{mex}(\{B_{l},B_{l+1},\dots,B_{r}\}) mex({Bl,Bl+1,,Br}),则将其从 B B B中删除。

m e x ( X ) \mathrm{mex}(X) mex(X):对于非负整数的有限集合 X X X来说, m e x ( X ) \mathrm{mex}(X) mex(X)的定义是不在 X X X中的最小非负整数。

分析:

首先,让我们考虑是否有可能将 B = P B=P B=P转换为 B = A B=A B=A。由于 B B B中没有重复的元素,一旦从 B B B中删除了一个整数 x x x,之后就不可能再删除任何大于或等于 x x x的数字了。因此,我们需要按降序移除 A A A中不包含的元素。

此外,从 B B B中移除 x x x时,我们应该选择不包含 x x x且其 m e x \mathrm{mex} mex x x x的最大区间。由于 B B B中没有重复的元素,因此最多有两个候选区间,我们应该选择包含所有小于 x x x的元素的区间。

最后,我们需要计算满足以下所有条件的 P P P的个数:

  • A A A作为 P P P的子序列存在。
  • 对于所有不包含在 A A A中且介于 0 0 0 N − 1 N-1 N1之间的整数 x x x,以下条件之一成立:
    • 0 0 0 x − 1 x-1 x1的所有整数的索引都小于 x x x的索引。
    • 0 0 0 x − 1 x-1 x1的所有整数的索引都大于 x x x的索引。

我们考虑按升序插入不包含在 A A A中的整数来满足条件。

第一个条件总是满足的。

对于第二个条件,当插入一个整数 x x x时,我们应将其插入最左边小于 x x x的整数的左边,或插入最右边小于 x x x的整数的右边。

在此基础上,我们考虑动态规划。

d p [ i ] [ l ] [ r ] dp[i][l][r] dp[i][l][r]是插入 i i i以内整数的方法数,使得最左边整数的左边最多有 l l l个整数 i i i,最右边整数的右边最多有 r r r个整数 i i i

问题的答案是 d p [ N − 1 ] [ 0 ] [ 0 ] dp[N-1][0][0] dp[N1][0][0]

如果 0 0 0包含在 A A A中,则使用 k k k初始化 d p [ 0 ] [ k − 1 ] [ M − k ] = 1 dp[0][k-1][M-k]=1 dp[0][k1][Mk]=1,从而得到 A k = 0 A_k=0 Ak=0

如果 0 0 0不包含在 A A A中,则初始化 d p [ 0 ] [ i ] [ M − i ] = 1 dp[0][i][M-i]=1 dp[0][i][Mi]=1 i = 0 , 1 , … , M i=0,1,\dots,M i=0,1,,M

依次计算 i = 1 , 2 , … , N − 1 i=1,2,\dots,N-1 i=1,2,,N1 d p [ i ] dp[i] dp[i]

i i i包含在 A A A中时

使用 k k k这样的 A k = i A_k=i Ak=i,对所有 l , r l,r l,r进行如下更新:

d p [ i ] [ min ⁡ ( l , k − 1 ) ] [ min ⁡ ( r , M − k ) ] + = d p [ i − 1 ] [ l ] [ r ] dp[i][\min(l,k-1)][\min(r,M-k)]+=dp[i-1][l][r] dp[i][min(l,k1)][min(r,Mk)]+=dp[i1][l][r]

更新只需 O ( M 2 ) O(M^2) O(M2)时间。

i i i不包括在 A A A中时

以下条件成立:

d p [ i ] [ l ] [ r ] = ∑ L = l M d p [ i − 1 ] [ L ] [ r ] + ∑ R = r M d p [ i − 1 ] [ l ] [ R ] dp[i][l][r]=\sum_{L=l}^{M}dp[i-1][L][r] +\sum_{R=r}^{M}dp[i-1][l][R] dp[i][l][r]=L=lMdp[i1][L][r]+R=rMdp[i1][l][R]

如果用简单的方法计算,时间复杂度为 O ( M 3 ) O(M^3) O(M3),但使用累积和方法,计算时间为 O ( M 2 ) O(M^2) O(M2)

因此,我们的解决方案的总体时间复杂度为 O ( N M 2 ) O(NM^2) O(NM2)
使用二项式系数直接计算 d p [ m i n ( A ) ] dp[min(A)] dp[min(A)]可以减少需要考虑的表的范围,从而使计算速度提高一个常数量级。

代码:

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

using mint = atcoder::modint;

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> B(N, -1);
    for (int i = 0; i < M; i++) {
        int a;
        cin >> a;
        B[a] = i;
    }
    vector<mint> fact(N + 1, 1), fact_inv(N + 1, 1);
    for (int i = 1; i <= N; i++) fact[i] = fact[i - 1] * i;
    fact_inv[N] = fact[N].inv();
    for (int i = N; i > 0; i--) fact_inv[i - 1] = fact_inv[i] * i;
    auto Binom = [&](int a, int b) -> mint {
        if (N < a || a < b || b < 0) return 0;
        return fact[a] * fact_inv[b] * fact_inv[a - b];
    };
    int X = 0;
    while (B[X] == -1) X++;
    int L = B[X], R = M - 1 - B[X];
    vector dp(L + 1, vector<mint>(R + 1));
    for (int i = 0; i <= L; i++)
        for (int j = 0; j <= R; j++) {
            int Y = X;
            if (i != L) Y--;
            if (j != R) Y--;
            int Z = L - i + R - j + 1;
            dp[i][j] = Binom(Y + Z, Z);
        }
    for (int idx = X + 1; idx < N; idx++) {
        int c = B[idx];
        if (c == -1) {
            vector n_dp(L + 1, vector<mint>(R + 1));
            for (int i = 0; i <= L; i++) {
                mint tmp = 0;
                for (int j = R; j >= 0; j--) {
                    tmp += dp[i][j];
                    n_dp[i][j] = tmp;
                }
            }
            for (int i = L; i >= 0; i--) {
                for (int j = 0; j <= R; j++) {
                    if (i) dp[i - 1][j] += dp[i][j];
                    n_dp[i][j] += dp[i][j];
                }
            }
            swap(n_dp, dp);
        } else if (c < L) {
            for (int i = c + 1; i <= L; i++) {
                for (int j = 0; j <= R; j++) {
                    dp[c][j] += dp[i][j];
                }
            }
            L = c;
        } else if (M - 1 - c < R) {
            c = M - 1 - c;
            for (int i = 0; i <= L; i++) {
                for (int j = c + 1; j <= R; j++) {
                    dp[i][c] += dp[i][j];
                }
            }
            R = c;
        }
    }
    cout << (dp[0][0] * (mint(2)).pow(max(X - 1, 0))).val() << endl;
    return 0;
}

赛后交流

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

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

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

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

相关文章

nss做题

[NCTF 2018]签到题 1.f12在index.php中找到flag [NSSCTF 2022 Spring Recruit]ezgame 1.在js源码中就有flag [UUCTF 2022 新生赛]websign 1.打开环境后发现ctrlu和右键&#xff0c;f12都被禁用了。两种方法&#xff0c;第一种&#xff1a;禁用js&#xff1b;第二中提前打开…

数据结构(五)树与二叉树

2024年5月26日一稿(王道P142) 基本概念 术语 性质 二叉树 5.2.2 二叉树存储结构

vue3中基于element-plus封装一个表格弹框组件,要求可以单选和多选table数据

单选&#xff1a; <template><SelectMaterialref"selectMaterialRef"check"checkbox"select"selectMaterial"></SelectMaterial><el-button type"primary" size"small" icon"el-icon-plus"…

【STM32】新建工程(江科大)

文章目录 STM32的开发方式库函数文件夹一、新建一个基于标准库的工程1.建立一个存放工程的文件夹2.打开Keil5 二、通过配置寄存器来完成点灯1.配置RCC寄存器2.配置PC13口&#xff08;1&#xff09;配置PC13口的模式&#xff08;2&#xff09;给PC13口输出数据 三、为寄存器添加…

与MySQL的初相遇

&#x1f30e;初识MySQL 注&#xff1a;本文SQL语句只为了验证猜想&#xff0c;不会也不要紧。 文章目录&#xff1a; MySql开端 认识数据库       什么是数据库       主流数据库       MySQL的本质 MySQL基础使用       连接mysql服务器     …

【Linux初探】:解锁开源世界的神秘钥匙

文章目录 &#x1f680;一、了解Linux&#x1f525;二、Linux 的发行版❤️三、Linux应用领域&#x1f4a5;四、Linux vs Windows & mac &#x1f680;一、了解Linux Linux是一种自由、开放源代码的操作系统&#xff0c;它的内核由芬兰计算机科学家Linus Torvalds在1991年创…

图片AI高效生成惊艳之作,一键解锁无限创意,轻松打造概念艺术新纪元!

在数字化时代&#xff0c;图片已经成为我们表达创意、传递信息的重要载体。然而&#xff0c;传统的图片生成方式往往耗时耗力&#xff0c;无法满足我们对于高效、创意的需求。幸运的是&#xff0c;现在有了图片AI&#xff0c;它以其高效、智能的特点&#xff0c;为我们带来了全…

数组-最接近给出数字的三数之和

题目描述 解题思路 这里使用三层for循环&#xff0c;暴力解法穷举所有三个数和的可能性&#xff0c;注意三层循环里的索引不要重复。 代码实现 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返…

C语言——小知识和小细节19

一、奇数位与偶数位互换 1、题目介绍 实现一个宏&#xff0c;将一个整数的二进制补码的奇数位与偶数位互换。输出格式依旧是十进制整数。示例&#xff1a; 2、分析 既然想要交换奇数位和偶数位上的数字&#xff0c;那么我们就要先得到奇数位和偶数位上的数字&#xff0c;那么…

THREE.JS中的向量点乘,以及他的几何意义。

1. THREE.JS中的向量点乘&#xff0c;以及他的几何意义 向量点乘的公式 : 2. 在three.js 中计算向量点乘 const a new THREE.Vector3(10, 10, 0); const b new THREE.Vector3(20, 0, 0); const dot a.dot(b);从这里可以看出&#xff0c;向量的点乘的结果是一个数字(标量…

嵌入式进阶——LED呼吸灯(PWM)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 PWM基础概念STC8H芯片PWMA应用PWM配置详解占空比 PWM基础概念 PWM全称是脉宽调制&#xff08;Pulse Width Modulation&#xff09…

安卓手机电脑平板均支持

最近随着人工智能的火热&#xff0c;越来越多人问我怎么设置&#xff0c;我这边主要提供简单的配置&#xff0c;能够实现想要的功能&#xff0c;不懂得的友友们可以私聊我&#xff0c;

一文读懂Apollo客户端配置加载流程

本文基于 apollo-client 2.1.0 版本源码进行分析 Apollo 是携程开源的配置中心&#xff0c;能够集中化管理应用不同环境、不同集群的配置&#xff0c;配置修改后能够实时推送到应用端&#xff0c;并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配…

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…

OpenAI策略:指令层级系统让大模型免于恶意攻击

现代的大模型&#xff08;LLMs&#xff09;不再仅仅是简单的自动完成系统&#xff0c;它们有潜力赋能各种代理应用&#xff0c;如网页代理、电子邮件秘书、虚拟助手等。然而&#xff0c;这些应用广泛部署的一个主要风险是敌手可能诱使模型执行不安全或灾难性的行动&#xff0c;…

别人不愿意教,那我来教你Simulink建模(二)【语法知识】【原创分享】

文章目录 前言节点和状态的区别?local 和非 local 的区别?事件的作用?Bus 总线?Memory 模块?caller用法?自己瞎练习的(我也不知道为啥会多出来.h文件)自己瞎练习的(这个没有多出来.h文件)autosar实例学习前言 继续更新去年的博文系列,请君切记,师父领进门修行在个…

ant design pro 6.0列表渲实践demo

ant design pro 用户列表渲实践 用户页面&#xff1a; src\pages\Admin\User\index.tsx import { PlusOutlined } from ant-design/icons; import type { ActionType, ProColumns, ProDescriptionsItemProps } from ant-design/pro-components; import {PageContainer,ProDe…

JAVA方法引用,异常,File,IO流知识总结

文章目录 JAVA第六周学习笔记方法引用引用静态方法引用成员方法引用构造方法其他调用方式使用类名引用成员方法引用数组的构造方法 异常作用处理方式常见成员方法抛出异常finally自定义异常 File路径构造方法**判断、获取****创建 、删除****获取并遍历**练习 IO流体系字节流Fi…

软件设计师备考笔记(十):网络与信息安全基础知识

文章目录 一、网络概述二、网络互连硬件&#xff08;一&#xff09;网络的设备&#xff08;二&#xff09;网络的传输介质&#xff08;三&#xff09;组建网络 三、网络协议与标准&#xff08;一&#xff09;网络的标准与协议&#xff08;二&#xff09;TCP/IP协议簇 四、Inter…

Linux基础(八):计算机基础概论

本篇博客简单介绍计算机的基础知识&#xff0c;为后续学习做个铺垫。 目录 一、计算机的基本组成 1.1 计算机组成五大部件 1.1.1 运算器&#xff08;Arithmetic Logic Unit&#xff0c;ALU&#xff09; 1.1.2控制器 &#xff08;Control Unit&#xff0c;CU&#xff09; …