Codeforces Round 953 (Div. 2) A~F

A.Alice and Books(思维)

题意:

爱丽丝有 n n n本书。第 1 1 1本书包含 a 1 a_1 a1页,第 2 2 2本书包含 a 2 a_2 a2页, … \ldots n n n本书包含 a n a_n an页。爱丽丝的操作如下:

  • 她把所有的书分成两个非空的书堆。这样,每本书最后都会被恰好放在两堆书中的一堆里。
  • 爱丽丝阅读每一堆中编号最高的一本书。

爱丽丝非常喜欢阅读。帮她找出把书分成两堆后,她最多可以阅读的总页数。

分析:

观察题目很容易看出来,最后一个数字是必须取的,用前 n − 1 n-1 n1个数字的最大值加上最后一个值求和即可。

代码:

#include<bits/stdc++.h>

using namespace std;
const int N = 110;
int a[N];

void solve() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    int ans = a[n];
    int ans2 = 0;
    for (int i = 1; i < n; ++i) {
        ans2 = max(ans2, a[i]);
    }
    cout << ans + ans2 << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

B.New Bakery(数学)

题意:

鲍勃决定开一家馒头店。开业当天,他烤出了 n n n个可以出售的馒头。通常一个馒头的价格是 a a a个硬币,但为了吸引顾客,鲍勃组织了以下促销活动:

  • 鲍勃选择某个整数 k k k( 0 ≤ k ≤ min ⁡ ( n , b ) 0\le k\le\min(n,b) 0kmin(n,b))。
  • 鲍勃以修改后的价格出售第一批 k k k个馒头。在这种情况下,售出的 i i i 1 ≤ i ≤ k 1\le i\le k 1ik)个馒头的价格是 ( b − i + 1 ) (b-i+1) (bi+1)个硬币。
  • 剩下的 ( n − k ) (n-k) (nk)个馒头以每个 a a a个硬币的价格出售。

注意 k k k可以等于 0 0 0。在这种情况下,鲍勃将以每个 a a a硬币的价格出售所有的馒头。

帮助鲍勃确定出售所有 n n n个馒头所能获得的最大利润。

分析:

首先当 a ≥ b a≥b ab时, k k k 0 0 0即可。

a < b a\lt b a<b时,要想使利润尽可能大,必须满足前 k k k天的利润都比 a a a大,即要满足 b − k ≥ a b−k≥a bka。可以得出 k k k最大为 b − a b−a ba,然后计算即可。

注意 k k k需要满足不超过 m i n ( n , b ) min(n,b) min(n,b)的限制,所以最终 k = m i n ( n , b − a ) k=min(n,b−a) k=min(n,ba),答案为 ( b + b − k + 1 ) k 2 + ( n − k ) a \frac{(b+b−k+1)k}{2}+(n−k)a 2(b+bk+1)k+(nk)a

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

void solve() {
    LL n, a, b;
    cin >> n >> a >> b;
    if (a >= b) {
        cout << n * a << endl;
        return;
    }
    LL k = min(n, b - a);
    cout << (b + b - k + 1) * k / 2 + a * (n - k) << endl;
}

int main() {
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

C.Manhattan Permutations(构造)

题意:

让我们把排列 † ^{\dagger} 的曼哈顿值 p p p表示为 ∣ p 1 − 1 ∣ + ∣ p 2 − 2 ∣ + … + ∣ p n − n ∣ |p_1-1|+|p_2-2|+\ldots+|p_n-n| p11∣+p22∣++pnn的值。

例如,对于排列 [ 1 , 2 , 3 ] [1,2,3] [1,2,3],曼哈顿值为 ∣ 1 − 1 ∣ + ∣ 2 − 2 ∣ + ∣ 3 − 3 ∣ = 0 |1-1|+|2-2|+|3-3|=0 ∣11∣+∣22∣+∣33∣=0,而对于排列 [ 3 , 1 , 2 ] [3,1,2] [3,1,2],曼哈顿值为 ∣ 3 − 1 ∣ + ∣ 1 − 2 ∣ + ∣ 2 − 3 ∣ = 2 + 1 + 1 = 4 |3-1|+|1-2|+|2-3|=2+1+1=4 ∣31∣+∣12∣+∣23∣=2+1+1=4

给你整数 n n n k k k。请找出长度为 n n n的排列 p p p使其曼哈顿值等于 k k k,或者确定不存在这样的排列。

† ^{\dagger} 长度为 n n n的排列是一个数组,由 n n n个不同的整数组成,这些整数从 1 1 1 n n n按任意顺序排列。例如, [ 2 , 3 , 1 , 5 , 4 ] [2,3,1,5,4] [2,3,1,5,4]是一个排列,但 [ 1 , 2 , 2 ] [1,2,2] [1,2,2]不是一个排列( 2 2 2在数组中出现了两次), [ 1 , 3 , 4 ] [1,3,4] [1,3,4]也不是一个排列( n = 3 n=3 n=3,但数组中有 4 4 4)。

分析:

首先我们可以发现,排列 p p p的哈曼顿值一定为偶数,不存在为奇数的情况。

因此无解的情况有两种:

  • k k k为奇数或者
  • 超过排列 p p p的最大哈曼顿值

对于有解的情况,考虑构造。
首先,令我们要得到的排列 p p p为单调递增的,也就是 p i = i ( 1 ≤ i ≤ n ) p_i=i(1≤i≤n) pi=i(1in),那么此时 p p p的哈曼顿值为 0 0 0。很明显,如果在此基础上交换两个数 x , y x,y x,y,那么 p p p的哈曼顿值便会增加 2 × ∣ x − y ∣ 2×∣x−y∣ 2×xy。也就是说,可以将一些数字两两配对,由于它们所产生的贡献值是互不干扰的,所以相当于是将 k 2 \frac{k}{2} 2k拆分成若干个不超过 n − 1 n−1 n1,且互不相等的数的和。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL N = 200010;
const LL MOD = 998244353;
LL a[N];

void solve() {
    LL n, k;
    cin >> n >> k;
    if (k % 2 == 1)
        cout << "No" << endl;
    else {
        LL ans = 0;
        for (LL i = 1, j = n; i <= n; i++, j--) {
            a[i] = i;
            ans += abs(j - i);
        }
        if (k > ans)
            cout << "No" << endl;
        else {
            LL x = k / 2;
            for (LL i = 1, j = min(x, n - 1);; i++) {
                swap(a[i], a[i + j]);
                x -= j;
                j = min(x, n - 2 * i - 1);
                if (!x)
                    break;
            }
            cout << "Yes" << endl;
            for (LL i = 1; i <= n; i++)
                cout << a[i] << " ";
            cout << endl;
        }
    }
}

int main() {
    LL t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

D.Elections(贪心)

题意:

伯兰正在举行选举。有 n n n名候选人参加选举,编号从 1 1 1 n n n。第 i i i名候选人有 a i a_i ai名粉丝会投票给他。此外,还有 c c c人对自己喜欢的候选人举棋不定,我们姑且称他们为 “举棋不定者”。未决定的人会把票投给编号最小的候选人。

获得最高票数的候选人赢得选举,如果多个候选人获得相同的最高票数,则其中票数最低的候选人获胜。

您觉得这些选举太无聊且难以预测,因此决定将一些候选人排除在外。如果您不允许 i i i号候选人参加选举,那么他的所有 a i a_i ai个粉丝都会变得犹豫不决,并将票投给编号最小的候选人。

你很想知道,从 1 1 1 n n n的每个 i i i中,第 i i i号候选人要想赢得选举,至少需要排除多少个候选人。

分析:

直接把 c c c加到 a 1 a_1 a1上,之后求出 a a a中最靠前的最大值编号 k k k,显然 k k k的答案为 0 0 0

考虑其他 x x x的答案。由于 a x a_x ax本身不是最大值,即使是排除目前最大的 a k a_k ak,这一部分也会加到编号最小的 a i a_i ai上,最大值一定不降。所以至少要将 x x x之前的 x − 1 x−1 x1个人全部排除,才能使 x x x为编号最小,增加 a x a_x ax让其最大。

所以维护 a a a的前缀和 s s s,若 s x ≥ a k s_x≥a_k sxak,只需要把前面全去掉即可,答案为 x − 1 x−1 x1。否则需要把前面全去掉,并且把 x x x后面的最大值 a k a_k ak也去掉,答案为 x x x

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL N = 2e5 + 10;
const LL MOD = 998244353;
LL n, c, a[N], s[N];

void solve() {
    cin >> n >> c;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    a[1] += c;
    LL maxx = 1;
    for (int i = 1; i <= n; i++) {
        s[i] = s[i - 1] + a[i];
        if (a[maxx] < a[i])
            maxx = i;
    }
    for (int i = 1; i <= n; i++) {
        if (i == maxx) {
            cout << "0" << " ";
        } else {
            if (s[i] >= a[maxx]) {
                cout << i - 1 << " ";
            } else {
                cout << i << " ";
            }
        }
    }
    cout << endl;
}

int main() {
    LL t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

E.Computing Machine(贪心、数学)

题意:

萨沙有两个长度相同的二进制字符串 s s s t t t,长度为 n n n,由字符"0"和"1"组成。

还有一台计算器可以对长度相同的二进制字符串 a a a b b b进行两种运算 k k k

  1. 如果 a i = a i + 2 = 0 a_{i}=a_{i+2}=0 ai=ai+2=0,则可以赋值 b i + 1 : = 1 b_{i+1}:=1 bi+1:=1( 1 ≤ i ≤ k − 2 1\le i\le k-2 1ik2)。
  2. 如果 b i = b i + 2 = 1 b_{i}=b_{i+2}=1 bi=bi+2=1,则可以赋值 a i + 1 : = 1 a_{i+1}:=1 ai+1:=1( 1 ≤ i ≤ k − 2 1\le i\le k-2 1ik2)。

萨沙对下面的问题产生了兴趣:如果我们考虑字符串 a = s l s l + 1 … s r a=s_ls_{l+1}\ldots s_r a=slsl+1sr和字符串 b = t l t l + 1 … t r b=t_lt_{l+1}\ldots t_r b=tltl+1tr,那么使用计算器最多可以在字符串 a a a中得到多少个"1"字符。由于萨沙非常好奇但很懒惰,所以由你来回答他感兴趣的几对字符串 ( l i , r i ) (l_i,r_i) (li,ri)的问题。

分析:

对于区间,寻找最优操作方案,我们贪心地考虑,先用 s s s 0 0 0增加 t t t 1 1 1,再用 t t t 1 1 1使 s s s 1 1 1变多,这样做一定是最优的,保证了第一步之后 t t t中的 1 1 1最多,从而最终 s s s中的 1 1 1也最多。

接着我们考虑每一位会怎样被改变。若 s i s_i si被变为 1 1 1,需要 t i − 1 = 1 t_{i−1}=1 ti1=1,同时 t i + 1 = 1 t_{i+1}=1 ti+1=1 t t t的这两位又会受到 s i − 2 , s i , s i + 2 s_{i−2},s_i,s_{i+2} si2,si,si+2的影响,所以对于每一位 s i s_i si,都只会受到 [ i − 2 , i + 2 ] [i−2,i+2] [i2,i+2]区间内的影响。

因此可以提前对整个区间进行操作,并对最终的 s s s求前缀和。对于询问长度不超过 4 4 4的情况暴力操作求解。超过 4 4 4时由于 [ l + 2 , r − 2 ] [l+2,r−2] [l+2,r2]只受区间 [ l , r ] [l,r] [l,r]内的影响,答案不变,记录下原来的答案,再单独对 [ l , l + 4 ] [l,l+4] [l,l+4]操作并记录前两位的答案,然后对 [ r − 4 , r ] [r−4,r] [r4,r]操作并记录后两位的答案,最后三部分相加即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 2e5 + 10;
LL n, q, pre[N], s[N], t[N], t1[N], t2[N];
char ss[N], st[N];

void deal(int l, int r) {
    int len = r - l + 1;
    for (int i = l; i <= r; i++) {
        t1[i - l + 1] = s[i];
        t2[i - l + 1] = t[i];
    }
    for (int i = 1; i + 2 <= len; i++) {
        if (!t1[i] && !t1[i + 2])
            t2[i + 1] = 1;
    }
    for (int i = 1; i + 2 <= len; i++) {
        if (t2[i] && t2[i + 2])
            t1[i + 1] = 1;
    }
    for (int i = 1; i <= len; i++)
        t1[i] += t1[i - 1];
}

void solve() {
    cin >> n >> ss >> st >> q;
    for (int i = 1; i <= n; i++) {
        s[i] = ss[i - 1] - '0';
        t[i] = st[i - 1] - '0';
    }
    deal(1, n);
    for (int i = 1; i <= n; i++)
        pre[i] = t1[i];
    while (q--) {
        LL l, r;
        cin >> l >> r;
        if (r - l < 4) {
            deal(l, r);
            cout << t1[r - l + 1] << endl;
        } else {
            int res = pre[r - 2] - pre[l + 1];
            deal(l, l + 4);
            res += t1[2];
            deal(r - 4, r);
            res += (t1[5] - t1[3]);
            cout << res << endl;
        }
    }
}

int main() {
    int T;
    cin >> T;
    while (T--)
        solve();
    return 0;
}

F.Large Graph(并查集)

题意:

给定一个长度为 n n n的数组 a a a。我们来构造一个大小为 n × n n\times n n×n的方阵 b b b,其中第 i i i行包含了循环右移 ( i − 1 ) (i-1) (i1)的数组 a a a。例如,对于数组 a = [ 3 , 4 , 5 ] a=[3,4,5] a=[3,4,5],得到的矩阵是

b = [ 3 4 5 5 3 4 4 5 3 ] b=\begin{bmatrix}3&4&5\\5&3&4\\4&5&3\end{bmatrix} b= 354435543

让我们构建下面的图形:

  • 该图包含 n 2 n^2 n2个顶点,每个顶点对应矩阵中的一个元素。我们把元素 b i , j b_{i,j} bi,j对应的顶点记为 ( i , j ) (i,j) (i,j)
  • 我们将在顶点 ( i 1 , j 1 ) (i_1,j_1) (i1,j1) ( i 2 , j 2 ) (i_2,j_2) (i2,j2)之间画一条边,如果 ∣ i 1 − i 2 ∣ + ∣ j 1 − j 2 ∣ ≤ k |i_1-i_2|+|j_1-j_2|\le k i1i2+j1j2k gcd ⁡ ( b i 1 , j 1 , b i 2 , j 2 ) > 1 \gcd(b_{i_1,j_1},b_{i_2,j_2})\gt 1 gcd(bi1,j1,bi2,j2)>1,其中 gcd ⁡ ( x , y ) \gcd(x,y) gcd(x,y)表示整数 x x x y y y最大公约数)。

你的任务是计算所得图形中的连通块数 † ^{\dagger}

† ^{\dagger} 图中的连通块是一个顶点集合,在这个集合中,任何顶点都可以通过边到达其他顶点,如果在这个集合中添加任何其他顶点,都会违反这一规则。

分析:

题目保证 k ≥ 2 k≥2 k2,说明斜着相邻的格子如果 g c d > 1 gcd>1 gcd>1,必定连边,很明显每个 a i a_i ai在循环移位之后分成的至多两条全是 a i a_i ai的斜线,所以除了数字为 1 1 1的情况,对角线的斜线一定同属一个连通块。

相邻两条斜线的距离是 1 1 1,由此我们可以把二维问题转为一维。使用 l o g log log分解质因数,预处理每个数的质因子,对于每个质因数找到上一次出现的位置,如果距离 ≤ k ≤k k就有边,并查集维护连通性,特判 1 1 1的情况即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 2e6 + 10;
int p[N], s[N], tot, k, a[N], lst[N], fa[N];

void init(int n) {
    for (int i = 2; i <= n; ++i) {
        if (!s[i])
            s[i] = p[++tot] = i;
        for (int j = 1; j <= tot && p[j] <= n / i; ++j) {
            s[i * p[j]] = p[j];
            if (!(i % p[j]))
                break;
        }
    }
}

int n;
vector<int> used;
bool vis[N];
LL ans;

int find(int x) {
    return fa[x] == x ? x : fa[x] = find(fa[x]);
}

void merge(int x, int y) {
    if (find(x) != find(y))
        fa[fa[x]] = fa[y];
}

void solve() {
    cin >> n >> k;
    for (int i = n; i < n + n; ++i) {
        cin >> a[i];
        a[i - n] = a[i];
    }
    int tmp = n;
    n = (n << 1) - 1;
    for (int i = 1; i <= n; ++i)
        fa[i] = i;
    for (int i = 1; i <= n; ++i) {
        int x = a[i];
        while (x != 1) {
            int now = s[x];
            int pre = lst[now];
            if (pre && i - pre <= k)
                merge(i, pre);
            lst[now] = i;
            while (!(x % now))
                x /= now;
            if (!vis[now]) {
                vis[now] = true;
                used.push_back(now);
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        if (a[i] == 1)
            ans += tmp - abs(tmp - i);
        else if (find(i) == i)
            ++ans;
    }
    cout << ans << endl;
    ans = 0;
    for (int x: used) {
        vis[x] = false;
        lst[x] = 0;
    }
    used.clear();
}

int main() {
    init(1000000);
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

赛后交流

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

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

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

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

相关文章

Web3设计风格的特点和趋势

Web3的设计风格正随着区块链技术和去中心化理念的兴起而逐渐形成自己的特色。Web3的设计风格反映了这一新兴领域的创新精神和对个性化、社区驱动的重视。随着技术的发展和用户需求的变化&#xff0c;Web3的设计风格预计将继续演进。以下是一些Web3设计风格的特点和趋势。北京木…

【启明智显产品介绍】工业级HMI芯片Model3C详解(二)图像显示

Model3C芯片国产自主的工业级高清显示与智能控制 MCU&#xff0c;配备强大的 2D 图形加速处理器、PNG/JPEG 解码引擎&#xff0c;可以满足多种交互设计场景和多媒体互动需求&#xff0c;具备高可靠性、高开放性&#xff0c;可广泛应用于工业自动化控制、HMI人机交互、串口屏、智…

Python低溫半导体电子束量子波算法计算

&#x1f3af;要点 &#x1f3af;任意维度求解器&#xff0c;绘制三维投影结果 | &#x1f3af;解二维静电场、静磁场 | &#x1f3af;狄利克雷、诺依曼条件几何矩阵算子 | &#x1f3af;算法模拟低溫半导体材料 | &#x1f3af;计算曲面达西流 | &#x1f3af;电子结构计算和…

深入探索 Gradle 自动化构建技术(六、Gradle 插件平台化框架 ByteX 探秘之旅)

public void test1(){ //1. Collection 提供了两个方法 stream() 与 parallelStream() List list new ArrayList<>(); Stream stream list.stream(); //获取一个顺序流 Stream parallelStream list.parallelStream(); //获取一个并行流 //2. 通过 Arrays 中的 stream…

使用Spring Boot构建全栈应用程序:从理论到实践

文章目录 引言第一章 项目初始化1.1 使用Spring Initializr生成项目1.2 创建基本项目结构 第二章 后端服务开发2.1 定义实体类2.2 创建Repository接口2.3 实现Service类2.4 创建Controller类 第三章 前端集成3.1 使用Thymeleaf模板引擎3.2 创建前端控制器 第四章 安全配置4.1 S…

AcWing算法基础课笔记——求组合数4

求组合数Ⅳ 用来解决求 C a b C_a^b Cab​的问题&#xff08;没有模运算&#xff09; 解决办法&#xff1a;分解质因数&#xff0c;实现高精度乘法。 C a b a ! b ! ( a − b ) ! C_a^b \frac{a!}{b!(a - b)!} Cab​b!(a−b)!a!​ 其中 a ! a! a!可以用 p p p的倍数来表示…

Linux中web集群-nginx负载均衡及案例

概述 代理&#xff1a;外卖&#xff0c;中介&#xff0c;中间商&#xff0c;用户无法直接做事情&#xff0c;通过中介进行处理 用户–》代理–》节点&#xff0c;后面只有一个节点&#xff0c;一般使用的是nginx代理功能即可&#xff0c;如果是集群就需要使用nginx负载均衡 …

世界名著精选,免费!精选了数百本世界名著,打包带走!

世界名著精选是一款汇集了全球经典文学作品的电子书阅读软件。是一个旨在让经典文学作品更易于接触和阅读的平台。它不仅收录了世界各地的经典名著&#xff0c;还通过现代技术手段&#xff0c;让阅读变得更加便捷和个性化。 软件链接&#xff1a;免费&#xff01;几百种资源&a…

【数据结构与算法】图论 详解

何为完全图、稀疏图、稠密图。 完全图&#xff1a;完全图是一种简单的无向图&#xff0c;其中每对不同的顶点之间都恰好有一条边。对于有n个顶点的完全图&#xff0c;它包含n(n-1)/2条边。在有向图中&#xff0c;如果任意两个顶点之间都存在方向相反的两条边&#xff0c;包含n(…

OA流程节点超时功能

在OA系统中&#xff0c;节点超时功能是一个关键的技术特性&#xff0c;它能够确保流程的顺畅进行&#xff0c;避免任务因为个别环节的延误而影响整体进度。本文将探讨OA系统中节点超时功能的技术实现和优化策略。 参考泛微OA ecology E9 前台设置&#xff1a; 系统管理员在管…

2000年 - 2022年 Fama-French三因子模型数据+代码

Fama-French三因子模型是由著名经济学家尤金法玛&#xff08;Eugene Fama&#xff09;和肯尼斯法兰奇&#xff08;Kenneth French&#xff09;提出的&#xff0c;旨在改进资本资产定价模型&#xff08;CAPM&#xff09;&#xff0c;更全面地解释资产收益率的变化。该模型认为&a…

pytest测试框架pytest-rerunfailures插件重试失败用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;介绍下插件pytest-rerunfailures &#xff0c;用于在测试用例失败时自动重新运行这些测试用例。 pytest-rerunfailures官方显示的python和pytest版本限制&#xff1a; Python 3.8pytest 7.2 或更新版本 此插件可以通过以下可…

CentOS 7 内核 3.10 升级 6.5.2 (RPM 直装 + 源码编译)

方案一 直接基于 RPM 在线升级&#xff08;简单&#xff0c;速度快&#xff09; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y # &#xff08;选项一&#xff09;升级最新版内…

【GD32】从零开始学兆易创新32位微处理器——RTC实时时钟+日历例程

1 简介 RTC实时时钟顾名思义作用和墙上挂的时钟差不多&#xff0c;都是用于记录时间和日历&#xff0c;同时也有闹钟的功能。从硬件实现上来说&#xff0c;其实它就是一个特殊的计时器&#xff0c;它内部有一个32位的寄存器用于计时。RTC在低功耗应用中可以说相当重要&#xf…

Linux操作系统段式存储管理、 段页式存储管理

1、段式存储管理 1.1分段 进程的地址空间&#xff1a;按照程序自身的逻辑关系划分为若干个段&#xff0c;每个段都有一个段名&#xff08;在低级语言中&#xff0c;程序员使用段名来编程&#xff09;&#xff0c;每段从0开始编址。内存分配规则&#xff1a;以段为单位进行分配…

Redis-事务-watch-unwatch

文章目录 1、监视key2、提交事务 1、监视key 打开两个窗口&#xff0c;第一个窗口先监视key&#xff0c;然后开始事务&#xff0c;然后再打开第二个窗口&#xff0c;修改balance为0 2、提交事务 此时事务被打断

分布式定时任务系列10:XXL-job源码分析之路由策略

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 分布式定时任务系列5&#xff1a;XXL-job中blockingQueue的应用 …

【深度学习驱动流体力学】计算流体力学算例剖析与实现

目录 一.求解器分类汇总压缩性流动求解器(Compressible Flow Solvers):不可压缩流动求解器(Incompressible Flow Solvers):多相流动求解器(Multiphase Flow Solvers):热传递求解器(Heat Transfer Solvers):其他特殊求解器:其他常见求解器:求解器分类:二.求解器案…

黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查

缓存菜品 后端服务都去查询数据库&#xff0c;对数据库访问压力增大。 解决方式&#xff1a;使用redis来缓存菜品&#xff0c;用内存比磁盘性能更高。 key :dish_分类id String key “dish_” categoryId; RestController("userDishController") RequestMapping…

Android Studio 安卓手机上实现火柴人动画(Java源代码—Python)

android:layout_marginLeft“88dp” android:layout_marginTop“244dp” android:text“Python” android:textSize“25sp” app:layout_constraintStart_toStartOf“parent” app:layout_constraintTop_toTopOf“parent” /> </androidx.constraintlayout.widget.…