Codeforces Round 954 (Div. 3) A~F

Codeforces 954A - Diagonal Walking(简单数学) Problem Description Mikhail walks on a 2D plane. He can go either up or right. You are given a sequence of Mikhail's moves. He thinks that this sequence is too long and he wants to make it as short ... 阅读详情

A.X Axis(暴力)

题意:

在XXX轴(1≤xi≤101\leq x_i\leq 101≤xi​≤10)上有三个点,其整数坐标分别为x1x_1x1​、x2x_2x2​和x3x_3x3​。您可以选择XXX轴上任何一个整数坐标为aaa的点。请注意,点aaa可能与x1x_1x1​、x2x_2x2​或x3x_3x3​重合。设f(a)f(a)f(a)是给定点到点aaa的总距离。求f(a)f(a)f(a)的最小值。

点aaa与bbb之间的距离等于∣a−b∣|a-b|∣a−b∣。例如,点a=5a=5a=5与b=2b=2b=2之间的距离为333。

分析:

暴力枚举一下所有可能,取最小值即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

void solve() {
    LL a, b, c;
    cin >> a >> b >> c;
    LL ans = 100;
    for (LL i = 0; i <= 10; i++) {
        ans = min(ans, abs(i - a) + abs(i - b) + abs(i - c));
    }
    cout << ans << endl;
}

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

B.Matrix Stabilization(模拟)

题意:

给你一个大小为n×mn\times mn×m的矩阵,其中行的编号从上到下为111至nnn,列的编号从左到右为111至mmm。位于第iii行和第jjj列交点上的元素用aija_{ij}aij​表示。

考虑稳定矩阵aaa的算法:

  1. 找到单元格(i,j)(i,j)(i,j)使其值严格大于所有相邻单元格的值。如果没有这样的单元格,则终止算法。如果有多个这样的单元格,则选择iii值最小的单元格;如果仍有多个单元格,则选择jjj值最小的单元格。
  2. 设置 aij=aij−1a_{ij}=a_{ij}-1aij​=aij​−1。
  3. 转到步骤111。

在此问题中,如果单元格(a,b)(a,b)(a,b)和(c,d)(c,d)(c,d)有一个共同的边,即∣a−c∣+∣b−d∣=1|a-c|+|b-d|=1∣a−c∣+∣b−d∣=1,那么这两个单元格就被视为相邻单元格。

您的任务是在执行稳定算法后输出矩阵aaa。可以证明这种算法不可能运行无限次迭代。

分析:

按题意进行模拟。从上到下,从左到右枚举元素,每次如果此元素严格大于周围的元素,就赋值为周围四个元素中最大的。因为操作以后还是没有严格小于周围的元素,所以操作后不会使得前面的元素不符合要求。

注意,边上的元素取最大值时可能会超出边界,所以每组数据要把边界外的元素都设为000。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 2005;
LL a[N][N];

void solve() {
    LL n, m;
    cin >> n >> m;
    for (LL i = 0; i <= n + 1; i++) {
        a[i][0] = 0;
        a[i][m + 1] = 0;
    }
    for (LL i = 0; i <= m + 1; i++) {
        a[0][i] = 0;
        a[n + 1][i] = 0;
    }
    for (LL i = 1; i <= n; i++) {
        for (LL j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }
    for (LL i = 1; i <= n; i++) {
        for (LL j = 1; j <= m; j++) {
            a[i][j] = min(a[i][j], max(a[i - 1][j], max(a[i + 1][j], max(a[i][j - 1], a[i][j + 1]))));
            cout << a[i][j] << ' ';
        }
        cout << endl;
    }
}

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

C.Update Queries(排序)

题意:

下面是一个简单的问题。给你一个长度为nnn的字符串sss(由小写拉丁字母组成),以及一个长度为mmm(1≤indi≤n1\leq ind_i\leq n1≤indi​≤n)的索引数组indindind和一个长度为mmm的字符串ccc(由小写拉丁字母组成)。然后,按顺序执行更新操作,即在第iii个操作中,设置sindi=cis_{ind_i}=c_isindi​​=ci​。请注意,所有的mmm操作都是从第一个操作到最后一个操作。

当然,如果改变数组indindind中索引的顺序和/或字符串ccc中字母的顺序,会得到不同的结果。如果数组indindind中的索引和字符串ccc中的字母顺序可以随意改变,那么在进行mmm次更新操作后,可以得到的字典序最小的字符串sss。

当且仅当满足以下条件之一时,字符串aaa在字典序上小于字符串bbb:

  • aaa是bbb的前缀,但a≠ba\neq ba=b;
  • 在aaa和bbb不同的第一个位置,字符串aaa中的符号在字母表中的位置比字符串bbb中的相应符号早。

分析:

我们发现idnidnidn和ccc都可以重新排列,考虑对其进行排序。如果idnidnidn的元素全部满足两两不相同,则直接在排序后按顺序填入即可,因为这样保证字典序小的排在了前面。对于相同的元素,先插入的元素会被后面的覆盖掉,只需要考虑最后一次操作,而前面的操作则用字典序最大的来顶替即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 1e5 + 5;
int idn[N];
string s, t;

void solve() {
    LL n, m;
    t = "";
    cin >> n >> m >> s;
    for (int i = 1; i <= m; i++)
        cin >> idn[i];
    for (int i = 1; i <= m; i++) {
        char tmp;
        cin >> tmp;
        t += tmp;
    }
    sort(idn + 1, idn + 1 + m);
    sort(t.begin(), t.end());
    deque<char> q;
    for (int i = 0; i < t.size(); i++)
        q.push_back(t[i]);
    for (int i = 1; i <= m; i++) {
        if (idn[i] != idn[i - 1]) {
            s[idn[i] - 1] = q.front();
            q.pop_front();
        } else {
            q.pop_back();
        }
    }
    cout << s << endl;
}

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

D.Mathematical Problem(数学)

题意:

给你一个长度n>1n\gt 1n>1的字符串sss,由从000到999的数字组成。您必须在这个字符串中准确插入n−2n-2n−2个+++(加法)符号或×\times×(乘法)符号,才能形成一个有效的算术表达式。

在本题中,符号不能放在字符串sss的第一个字符之前或最后一个字符之后,也不能连续写入两个符号。此外,请注意字符串中数字的顺序不能改变。以s=987009s=987009s=987009为例:

  • 从这个字符串可以得到以下算术表达式:9×8+70×0+9=819\times 8+70\times 0+9=819×8+70×0+9=81,98×7×0+0×9=098\times 7\times 0+0\times 9=098×7×0+0×9=0,9+8+7+0+09=9+8+7+0+9=339+8+7+0+09=9+8+7+0+9=339+8+7+0+09=9+8+7+0+9=33。请注意,数字090909被认为是有效的,并被转换为999。
  • 从该字符串中无法得到以下算术表达式:+9×8×70+09+9\times 8\times 70+09+9×8×70+09(符号只能放在数字之间)、98×70+0+998\times 70+0+998×70+0+9(因为有666个数字,所以必须正好有444个符号)。

算术表达式的结果是根据数学规则计算出来的–首先进行所有乘法运算,然后是加法运算。您需要找出在给定的字符串sss中插入恰好n−2n-2n−2个加法或乘法符号所能得到的最小结果。

分析:

本题我们分情况考虑

考虑n=2n=2n=2的情况,不能加运算符,如果第一个字符为000,则输出第二个字符,否则输出sss。

考虑n=3n=3n=3且有000,000在中间的情况,答案为第一个和第三个字符乘积或者相加中较小的一个。

其他长度的情况:如果有000,则将所有运算符置为乘,最后结果就是000。如果没有000,则将sss中所有不为111的数统计求和。此时的求和有n−1n-1n−1个运算符,其中涉及到111的运算符全为*,不涉及111的运算符全为+。此时需要去掉一个运算符,再次遍历sss,依此考虑将sss中任意两个相邻的字符组合成一个二位数字,看哪个组合最后得到的结果最小,取最小值即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const LL MAXN = 0x3f3f3f3f;
string s;

void solve() {
    int n;
    cin >> n >> s;
    if (n == 2) {
        if (s[0] == '0')
            cout << s[1] << endl;
        else
            cout << s << endl;
    } else if (n == 3 && s[1] == '0') {
        cout << min(s[0] + s[2] - '0' * 2, (s[0] - '0') * (s[2] - '0')) << endl;
    } else if (s.find('0') != std::string::npos) {
        cout << "0" << endl;
    } else {
        int sum = 0;
        for (const auto &x: s) {
            if (x > '1') {
                sum += x - '0';
            }
        }
        int ans = MAXN;
        for (int i = 0; i < n - 1; ++i) {
            int num = stoi(s.substr(i, 2));
            ans = min(ans, sum - (s[i] == '1' ? 0 : s[i] - '0') - (s[i + 1] == '1' ? 0 : s[i + 1] - '0') + num);
        }
        cout << ans << endl;
    }
}


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

E.Beautiful Array(数据结构)

题意:

给你一个整数数组a1,a2,…,ana_1,a_2,\ldots,a_na1​,a2​,…,an​和一个整数kkk。您需要用最少的运算使数组变得美丽。

在进行操作前,可以随意对数组元素进行洗牌。对于一次操作,可以进行以下操作:

  • 选择一个索引1≤i≤n1\leq i\leq n1≤i≤n.
  • 生成ai=ai+ka_i=a_i+kai​=ai​+k。

如果所有的1≤i≤n1\leq i\leq n1≤i≤n都是bi=bn−i+1b_i=b_{n-i+1}bi​=bn−i+1​,那么数组b1,b2,…,bnb_1,b_2,\ldots,b_nb1​,b2​,…,bn​是美丽的。

求使数组美丽所需的最小运算次数,或者输出不可能。

分析:

首先利用map将aaa中的出现偶数次的元素去掉。我们发现如果一个数能通过另一个数相加若干个kkk得到,则这两个数%k的余数是相等的。将剩下的元素%k\%k%k存到map<int,vector>中,遍历这个新的map,对vector排序。如果vector中的元素数量是偶数,那么可以将相邻的两个vector作为一组进行+k+k+k变换。如果vector中的元素数量是奇数,那么这样的vector不能超过111个,维护一个前缀和后缀和来讨论vector中哪个元素作为回文中心,不参与到这种配对的计算中。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

void solve() {
    int n, k;
    cin >> n >> k;
    map<int, int> mapp;
    for (int i = 0; i < n; i++) {
        int t;
        cin >> t;
        mapp[t]++;
    }
    vector<int> a;
    for (const auto &[x, y]: mapp) {
        if (y & 1) {
            a.push_back(x);
        }
    }
    if ((int) a.size() <= 1) {
        cout << "0" << endl;
        return;
    }
    map<int, vector<int>> rec;
    for (int i = 0; i < a.size(); ++i) {
        int t = a[i];
        rec[t % k].push_back(t);
    }
    int cnt = 0;
    LL ans = 0;
    for (auto &[x, cur]: rec) {
        bool ok = true;
        if (cur.size() & 1) {
            cnt++;
            ok = false;
            if (cnt > 1) {
                cout << "-1" << endl;
                return;
            }
        }
        sort(cur.begin(), cur.end());
        if (ok) {
            for (int i = 1; i < cur.size(); i += 2) {
                ans += (cur[i] - cur[i - 1]) / k;
            }
        } else if (cur.size() > 1) {
            int m = (int) cur.size();
            vector<LL> pref(m);
            vector<LL> suff(m);
            pref[1] = cur[1] - cur[0];
            for (int i = 3; i < m; i += 2) {
                pref[i] = pref[i - 2] + cur[i] - cur[i - 1];
            }
            suff[m - 2] = cur[m - 1] - cur[m - 2];
            for (int i = m - 4; i >= 0; i -= 2) {
                suff[i] = suff[i + 2] + cur[i + 1] - cur[i];
            }
            LL minn = min(pref[m - 2], suff[1]);
            for (int i = 2; i < m - 2; i += 2) {
                minn = min(minn, pref[i - 1] + suff[i + 1]);
            }
            ans += minn / k;
        }
    }
    cout << ans << endl;
}

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

F.Non-academic Problem(联通分量)

题意:

给你一个连通的无向图,其顶点用111到nnn之间的整数编号。你的任务是尽量减少图中存在路径的顶点1≤u<v≤n1\leq u\lt v\leq n1≤u<v≤n对的数量。为了实现这一目标,你可以从图形中删除一条边。

请找出顶点对的最小数目!

分析:

整个图是连通的,删除边双内的边并不会影响连通性,删除桥边会变成两个连通块,一个大小为xxx另一个则为n−xn−xn−x。

对于一个大小为xxx的连通块,编号最小的点有另外x−1x−1x−1个点与其对应,以此类推,因此满足条件的点对数量是:
∑i=1x−1i=x(x−1)2 \sum_{i=1}^{x-1}i=\frac{x(x-1)}{2} i=1∑x−1​i=2x(x−1)​

考虑将图缩点为边双连通分量,然后只枚举桥边(即树边),对于所有情况取一个最小值即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 100010;
const int M = 200010;
int h[N], sz[N], dfn[N], low[N], id[N], szedcc[N], idx, n, m, timestamp, cntedcc;
stack<int> stk;
vector<int> G[N];
set<LL> S;
LL ans;

struct Edge {
    int to, nxt;
} e[M];

void add(int a, int b) {
    e[idx] = {b, h[a]};
    h[a] = idx++;
}

void tarjan(int u, int from) {
    stk.push(u);
    dfn[u] = low[u] = ++timestamp;

    for (int i = h[u]; i; i = e[i].nxt) {
        int to = e[i].to;

        if (!dfn[to]) {
            tarjan(to, i);
            low[u] = min(low[u], low[to]);
        } else if (i != (from ^ 1))
            low[u] = min(low[u], dfn[to]);
    }

    if (low[u] == dfn[u]) {
        ++cntedcc;
        int y;
        do {
            y = stk.top();
            stk.pop();
            id[y] = cntedcc;
            szedcc[cntedcc]++;
        } while (y != u);
    }
}

LL calc(LL x) {
    return x * (x - 1) / 2;
}

void dfs(int u, int f) {
    sz[u] = szedcc[u];
    for (int to: G[u]) {
        if (to == f)
            continue;
        dfs(to, u);
        sz[u] += sz[to];
        ans = min(ans, calc(sz[to]) + calc(n - sz[to]));
    }
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        cin >> n >> m;
        idx = 2;
        timestamp = cntedcc = 0;
        S.clear();
        for (int i = 0; i <= n; i++) {
            h[i] = dfn[i] = szedcc[i] = sz[i] = id[i] = low[i] = 0;
            vector<int>().swap(G[i]);
        }
        for (int i = 1, a, b; i <= m; i++) {
            cin >> a >> b;
            add(a, b);
            add(b, a);
        }
        for (int i = 1; i <= n; i++) {
            if (!dfn[i])
                tarjan(i, -1);
        }
        for (int u = 1; u <= n; u++) {
            for (int i = h[u]; i; i = e[i].nxt) {
                int to = e[i].to;
                int A = id[u], B = id[to];
                if (A < B)
                    swap(A, B);

                if (id[u] != id[to]) {
                    LL hash = 1ll * A * N + B;
                    if (S.count(hash))
                        continue;
                    S.insert(hash);
                    G[id[u]].emplace_back(id[to]);
                    G[id[to]].emplace_back(id[u]);
                }
            }
        }
        ans = calc(n);
        dfs(1, 0);
        cout << ans << endl;
    }
    return 0;
}

赛后交流

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

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

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

相关推荐

Rancher操作手册(v2.7.5-rc1)

选择需要创建ingress的命名空间 ==》填写ingress名称 ==》在“规则”一栏,选择“Prefix” ==》输入访问路径 ==》选择访问路径对应的service ==》如果需要继续添加访问路径,点击“添加路径”,重复前面的步骤即可。选择需要创建Deployment的命名空间 ==》填写Deployment名称 ==》选择通用 ==》填写容器名称 ==》填写镜像 ==》选择镜像的拉取密文 ==》点击添加端口或Service。点击左侧菜单栏的集群里的“项目/命名空间”,点击右下角的“创建命名空间”。

weixin_60197334的博客 5569

Codeforces954F Runner's Problem矩阵优化DP

题目链接:http://codeforces.com/problemset/problem/954/FF. Runner's Problemtime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are running thro...

qq_36876305的博客 439

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8264

Codeforces Round 954 (Div.3)

CF954

djhws144的博客 1162

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

A robust and easy to implement method for IMU calibration without external equipments(IMU标定)

A robust and easy to implement method for IMU calibration without external equipments 1 标定原理1 亲试可用,还有动态演示效果不错。相比商用产品的简易标定流程,该标定方法有以下几点不同: 给出了加速度计和陀螺仪更复杂的模型。 利用Allan方差的定义,标定陀螺仪的偏置。 大量冗余数据,保证最优化收敛。利用数十...

擦擦擦大侠的博客 3948

Codeforces Round 954 (Div. 3)

为一组中的元素数量;若组中元素数量为奇数,那么有一个无需配对,可以将其删掉并按照偶数的方案计算。可以枚举被删的数字,但如果我们每次都按照这个方案计算,时间复杂度为。,与它相邻的单元格的值严格小于它的值,然后将该单元格的值一直减小直到不满足严格小于的条件;个符号,那么一定有一个两位数 (但值可能只有一位),那么我们可以枚举两位数。解:若有这样一个单元格,那么这个单元格一定会变成与它相邻的单元格中的最大值。不计入(使用乘号),需要注意的是当我们枚举的这个数为。为奇数时,至多一个组的元素个数为奇数,否则无解。

Ethrsu的博客 1122

Buck的振铃实验与分析

上上期我们提到了buck电路的开关的振铃波形,本质原因是LC的阻尼振荡。文章偏理论,那BUCK到底是怎么产生尖峰振荡呢? 要想把这个问题搞清楚,也很是不容易,所以文章有点长,请直接点赞转发加收藏。 问题 本期主要分析以下这两个问题: 1、死区时间是什么?这里有个小台阶是什么情况? 2、上下尖峰振荡是如何产生的?跟哪些因素有关? 理想的BUCK的SW波形 我们由浅入深,一步一步来,先看理想的开关SW波形—没有尖峰电压的波形。 为了能更好的看buck电路各个点的电压电流情况.

weixin_42005993的博客 3万+

CodeForces - 954 D. Fight Against Traffic

题目链接:点击打开链接 题意:n个点,m条边,起点s,终点m,每条边的权值为1,问是否能在不连通的点之间加一条边,使s到m的最短路不变。若能统计出来有多少条。 题解:最短路加上一点小判定,就能过,求一边s到各点的最短路,再求一边t到各点的最短路,然后分别去计算 dis1【i】 + 1 + did2【j】> dis1【t】 和 dis2【i】 + 1 + did2【j】> dis1【t】,若同时

PK__PK的博客 390

Google Earth Engine(GEE)——将sentinel - 2影像所有波段重采样到10m分辨率 (resample 和 projection的使用)

影像重投影是将一个影像从一个坐标系投影到另一个坐标系的过程。这通常涉及到将像素从一个平面坐标系变换到另一个平面坐标系。这可以用于许多应用中,例如建立数字高程模型(DEM)和地图制图。影像重投影通常需要进行数学计算,包括转换矩阵和插值算法,以确保像素值的准确性和精度。这次我们将对哨兵2好数据中20m分辨率的波段,重采样到10m分辨率中,然后同一参与计算。

此星光明博客 3107

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

大华 DSs 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。大华 DSS存在SQL注入漏洞,攻击者 pota/services/itcBuletin 路由发送特殊构造的数据包,利用报错注入获取数据库敏感信息。攻击者除了可以利用 SQL注入漏词获取数据库中的信息例如,管理员后台密码、站点的用户人人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限poc验证是否存在漏洞如果你想查询用户名和密码。

holyxp的博客 4003

Codeforces Round 954 (Div. 3) (A~F)(不会数学)

暴力枚举一下所有可能可以观察到:若一个数比周围四个数都大,那么最终会变成四个数当中最大的哪一个。对字符串c以及ind数组进行排序,通过贪心可以知道,我们需要按照索引从小到大的修改字符串,同时一个位置只会有一个字母与之对应,因此只需要同时按照字符串c从小到大修改即可。归纳题,观察后可以发现:一定有一个两位数,因此我们可以枚举这个两位数,然后取最小值。接下来考虑如何取最小值:若存在数字0,那么可以通过都用乘法来将最终结果变成0,此外,若存在数字1,可以通过乘法将1消掉。

weixin_61825750的博客 2572

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1764

Codeforces Round 954 (Div. 3)(A~F的代码和分析)

codeforces 954 A~F的题解

2301_78429186的博客 621

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Codeforces Round 954

Codeforces Round 954

青少年趣味编程 694

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Codeforces Round 954 (Div. 3) 题解

先排序c和a啦,然后我们可以发现,如果索引数组的有值相同的话,就s[a[i]]=c[r]啦,s[a[i+1]]=c[l]啦,因为索引数组有相同,可能会有两个c中的值赋值给s的同一个地方,我们先将最大的赋值过去,再用最小的覆盖,就这样啦。给你两个字符串 s,c 和索引数组a,你可以任意改变索引数组中值的位置,也可以改变c字符串的字符顺序,然后将c[i] 赋值给s[a[i]] 就是这样啦,求最小的s啦。) 所有我们直接赋值,嘻嘻。看,如果字符串里面有0呢 直接全*0 哦耶,直接是0 最小了吧,不对哦,如果。

2302_79115845的博客 744

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 201

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 309

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 571

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 748

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 82
上一篇: AtCoder Beginner Contest 359 A~F
下一篇: Codeforces Round 955 (Div. 2) A~E
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值