AtCoder Regular Contest 178 A~D

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,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上&#xff0c;我们总是对各种护肤成分充满好奇。今天&#xff0c;就让我们一起探讨一个热门话题——胶原蛋白三肽&#xff0c;它究竟能否深入我们的皮肤&#xff0c;为我们带来期待中的美丽改变呢&#xff1f; 首先&#xff0c;我们需要了解胶原蛋白肽是什么…

【编译原理复习笔记】中间语言

中间语言 中间语言的特点和作用 &#xff08;1&#xff09;独立于机器 &#xff08;2&#xff09;复杂性介于源语言和目标语言之间 中间语言可以使编译程序的结构在逻辑上更为简单明确 常用的中间语言 后缀式 图表示&#xff1a;抽象语法树&#xff0c;有向无环图 三地址代…

css卡片翻转 父元素翻转子元素不翻转效果

css卡片翻转 父元素翻转子元素不翻转效果 vue <div class"moduleBox"><div class"headTitle"><span class"headName">大额案例</span></div><div class"moduleItem"><span class"module…

时间(空间)复杂度(结构篇)

目录 前言&#xff1a; 一、时间复杂度 1.1 时间复杂度的定义 1.2 时间复杂度的分析 表示方法&#xff1a; 1.3 常见的时间复杂度 1.4 时间复杂度的计算以及简单的分析 冒泡排序 折半查找&#xff08;二分查找&#xff09; 斐波那契数列&#xff08;递归&#xff09…

手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享

背景&#xff1a;书接上回&#xff0c;一站式安装Ubuntu及配置服务器手把手教学&#xff0c;一站式安装ubuntu及配置服务器-CSDN博客 在安装及配置好服务器后&#xff0c;因为课题组可能涉及多个用户共用一台服务器&#xff0c;为了防止服务器上代码误删和Anaconda环境管理混乱…

爽!AI手绘变插画,接单赚爆了!

我最近发现一款名叫Hyper-SD15-Scribble的AI项目&#xff0c;可以实现一键手绘变插画的功能&#xff0c;而且它搭载了字节出品的超快速生成图片的AI大模型Hyper-SD15&#xff0c;可以实现几乎实时生成图片&#xff0c;有了它&#xff0c;拿去接一些手绘商单分分钟出图&#xff…

安卓手机电脑平板均支持

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

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

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

鸿蒙 DevEco Studio 3.1 Release 下载sdk报错的解决办法

鸿蒙 解决下载SDK报错的解决方法 最近在学习鸿蒙开发&#xff0c;以后也会记录一些关于鸿蒙相关的问题和解决方法&#xff0c;希望能帮助到大家。 总的来说一般有下面这样的报错 报错一&#xff1a; Components to install: - ArkTS 3.2.12.5 - System-image-phone 3.1.0.3…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user&#xff1a;用户表存储用户信息&#xff08;登录admin后台&#xff09; 里面的字段分两类&#xff1a;用户基本信息&#xff08;用户名&#xff0c;邮箱&#xff0c;密…

【线程的互斥】

线程的互斥 临界区资源多个线程的运行多个线程对同一资源的竞争原子性保持线程之间地互斥互斥量(锁的原理)为什么是原子的 正确使用锁 临界区资源 进程创建线程&#xff0c;是共享内存的&#xff0c;可以对共享的资源有很方便的操作&#xff0c;当一些共享资源可以被多个线程进…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…

Golang实现文件复制

方法&#xff1a;三种 package zdpgo_fileimport ("errors""io""os" )// CopyFile 使用io.Copy进行文件的复制&#xff0c;同时也会复制文件的所有权限 // param src 复制文件 // param des 目标文件 // return error 错误信息 func CopyFile(s…

【QGIS入门实战精品教程】10.7: 基于DEM的地形因子分析(坡度、坡向、粗糙度、山体阴影、耐用指数)

文章目录 一、加载dem二、山体阴影三、坡度四、坡向五、地形耐用指数六、地形位置指数七、地表粗糙度一、加载dem 二、山体阴影 方法一:符号系统 利用符号系统中的山体阴影,渲染出阴影效果。 方法二:山体阴影工具 该算法计算输入中的数字化地形模型的山体阴影。根据太阳的位…

2024年教你怎么将学浪视频保存到本地

你是否曾为无法将学浪视频保存到本地而烦恼&#xff1f;现在&#xff0c;我们将在2024年教给你如何解决这个问题&#xff01;只需简单几步操作&#xff0c;即可轻松将学浪视频保存到您的本地设备&#xff0c;随时随地想看就看&#xff01; 我已经将下载学浪的工具打包好了&…

OSPF网络类型实验2

对R4 对R5&#xff0c;找R1注册 对R1宣告环回&#xff0c;再宣告一下tunnel接口 本实验不考虑区域划分 现在已经全部宣告完成 对R1&#xff0c;2&#xff0c;3改接口 broadcast工作方式hello时间10s&#xff0c;然后进行dr选举&#xff0c;由于2&#xff0c;3之间没有伪广播 …

滑不动窗口的秘密—— “滑动窗口“算法 (Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

淘工厂订单导出自动化工具

目录 下载安装与运行 主要目的 其他工具的弊端 本工具的优势 视频演示 下载新版后的注意事项 支持的导出项 什么叫一单多拍 常见问题 如何实现快捷登录 导出卡住时如何操作 如何精确导出 下载安装与运行 下载、安装与运行 语雀 主要目的 导出订单信息&#xf…