Codeforces Round 953 (Div. 2) A~F

Codeforces Round 953 (Div. 2) 阅读详情

A.Alice and Books(思维)

题意:

爱丽丝有nnn本书。第111本书包含a1a_1a1​页,第222本书包含a2a_2a2​页,…\ldots…第nnn本书包含ana_nan​页。爱丽丝的操作如下:

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

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

分析:

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

代码:

#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(数学)

题意:

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

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

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

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

分析:

首先当a≥ba≥ba≥b时,kkk取000即可。

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

注意kkk需要满足不超过min(n,b)min(n,b)min(n,b)的限制,所以最终k=min(n,b−a)k=min(n,b−a)k=min(n,b−a),答案为(b+b−k+1)k2+(n−k)a\frac{(b+b−k+1)k}{2}+(n−k)a2(b+b−k+1)k​+(n−k)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}†的曼哈顿值ppp表示为∣p1−1∣+∣p2−2∣+…+∣pn−n∣|p_1-1|+|p_2-2|+\ldots+|p_n-n|∣p1​−1∣+∣p2​−2∣+…+∣pn​−n∣的值。

例如,对于排列[1,2,3][1,2,3][1,2,3],曼哈顿值为∣1−1∣+∣2−2∣+∣3−3∣=0|1-1|+|2-2|+|3-3|=0∣1−1∣+∣2−2∣+∣3−3∣=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∣3−1∣+∣1−2∣+∣2−3∣=2+1+1=4。

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

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

分析:

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

因此无解的情况有两种:

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

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

代码:

#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(贪心)

题意:

伯兰正在举行选举。有nnn名候选人参加选举,编号从111到nnn。第iii名候选人有aia_iai​名粉丝会投票给他。此外,还有ccc人对自己喜欢的候选人举棋不定,我们姑且称他们为 “举棋不定者”。未决定的人会把票投给编号最小的候选人。

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

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

你很想知道,从111到nnn的每个iii中,第iii号候选人要想赢得选举,至少需要排除多少个候选人。

分析:

直接把ccc加到a1a_1a1​上,之后求出aaa中最靠前的最大值编号kkk,显然kkk的答案为000。

考虑其他xxx的答案。由于axa_xax​本身不是最大值,即使是排除目前最大的aka_kak​,这一部分也会加到编号最小的aia_iai​上,最大值一定不降。所以至少要将xxx之前的x−1x−1x−1个人全部排除,才能使xxx为编号最小,增加axa_xax​让其最大。

所以维护aaa的前缀和sss,若sx≥aks_x≥a_ksx​≥ak​,只需要把前面全去掉即可,答案为x−1x−1x−1。否则需要把前面全去掉,并且把xxx后面的最大值aka_kak​也去掉,答案为xxx。

代码:

#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(贪心、数学)

题意:

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

还有一台计算器可以对长度相同的二进制字符串aaa和bbb进行两种运算kkk:

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

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

分析:

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

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

因此可以提前对整个区间进行操作,并对最终的sss求前缀和。对于询问长度不超过444的情况暴力操作求解。超过444时由于[l+2,r−2][l+2,r−2][l+2,r−2]只受区间[l,r][l,r][l,r]内的影响,答案不变,记录下原来的答案,再单独对[l,l+4][l,l+4][l,l+4]操作并记录前两位的答案,然后对[r−4,r][r−4,r][r−4,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(并查集)

题意:

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

b=[345534453] b=\begin{bmatrix}3&4&5\\5&3&4\\4&5&3\end{bmatrix} b=​354​435​543​​

让我们构建下面的图形:

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

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

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

分析:

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

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

代码:

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

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

相关推荐

别再只盯着meta包了!盘点R语言中7个元分析工具包的特色与适用场景

本文深入评测了R语言中7个主流元分析工具包(meta、metafor、netmeta、mada、mvmeta、metasens、rmeta)的核心功能与适用场景,帮助研究者根据具体需求精准选型。通过对比表格和实际代码示例,详细解析了各工具包在传统两两比较、网络Meta分析、诊断准确性研究等不同场景下的差异化优势,并提供了性能对比和组合使用建议。

weixin_30736301的博客 296

C. Manhattan Permutations

输出满足|p1−1|+|p2−2|+…+|pn−n|=k的数组p,数组p为1到n的全排列。每次遍历,寻找符合条件的可以交换的最大数字。

m0_74310050的博客 470

STM32F103C8T6蓝莓派用HAL库GPIO模拟SPI驱动MAX31865读取PT100温度(附完整代码)

本文详细介绍了如何在STM32F103C8T6蓝莓派开发板上使用HAL库通过GPIO模拟SPI驱动MAX31865读取PT100温度传感器的完整方案。内容包括硬件连接、CubeMX配置、GPIO模拟SPI实现、温度计算算法及常见问题排查,并附有完整代码示例,帮助开发者快速实现高精度温度测量。

weixin_30684743的博客 937

Turtle Puzzle: Rearrange and Negate(Round 929)

【代码】Turtle Puzzle: Rearrange and Negate(Round 929)

GordrnGhost的博客 878

科研党必备:用MATLAB批量处理.mat文件数据的3种高效方法

本文为科研人员提供了使用MATLAB批量处理.mat文件数据的三种高效方法,涵盖智能数据加载、专业可视化与自动化报告生成。通过构建自动化框架、多维度数据画图策略及批量处理流程,帮助用户显著提升数据处理效率与图表专业性,解决海量实验数据的管理与分析难题。

weixin_29089057的博客 71

485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。      部分原理图如下,上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。1.把R10和R16改为1k,示波器C...

qq_26308521的博客 1万+

Codeforces Round 953 (Div. 2) (A~F)(冒充Div2)

思路:很经典的将区间操作转化成端点操作,首先考虑全部修改,然后可以发现对比于区间修改而言,只有区间最靠左的两个数跟区间最靠右的两个数可能会不一样,因此只需要关注区间的左右四个点即可,若区间长度小于4的我们直接特判。思路:分类讨论,首先若后面的选举人存在比当前选举人票数多的情况,那么必然是将前面所有的人全部排除,然后再看票数是否大于后面最大的票,若还是小,则将后面票数最多的人也排除掉。的图,所有的斜率为-1的线上所有的顶点全部连通(1除外,需要特判)。总上,我们需要统计的是,删去前。个人的票小于他的最小。

weixin_61825750的博客 1894

腾讯大佬总结的170道 python面试题

简述基于 TCP 协议的套接字通信流程。19.面向对象中`__new__` 和 `__init__` 区别。86. 解释 Python 中的`//`,`%`和`**`运算符。45.isinstance 的作用以及与 type()的区别。3. 简述下 Python 中的字符串、列表、元组和字典。143. 如何高效的找到 redis 中的某个 KEY。140. 如何保证 redis 中的数据都是热点数据。147. redis 中的 watch 的命令的作用。108. 简述 进程、线程、协程的区别以及应用场景。

AudiA6LV6的博客 488

Manhattan Permutations

首先观察样例,不难发现有可能\(k\)为奇的时候无解 证明:《离散数学》中有一道题目的trick是\(|i-j|\)与\(i+j\)的奇偶性相同,所以曼哈顿排列的奇偶性与\(p_1+1+p_2+2+...+p_n+n=2(1+2+3+...+n)\),后者显然为偶数,所以\(k\)为奇时无解 其次一个很自然的想法就是当\(p\)为\([n,n-1,n-2,...,3,2,1]\)时,曼哈顿排列最...

dingxingdi的博客 192

KingSCADA实现按钮点击效果

哈喽,你好啊,我是雷工!在做SCADA项目的时候,按钮是不可缺少的功能,但软件自带的按钮太丑,已经无法满足现如今客户对界面美观度的要求。这时候就需要UI小姐姐设计美观大气的SCADA界面,但UI设计的按钮切图放到程序中只是图片素材,当添加了按钮功能时,虽然能实现按钮功能,但没有任何点击效果;当遇到有需要连锁条件才能点击的按钮时,操作员无法区分是有连锁点击了没反应,还是系统界面卡死了导致的没点击成功,这时候有点击效果就能很好的区分这种问题。本篇介绍一种实现按钮点击效果的方法,以下为操作过程。

做有价值的事,积累有价值的笔记! 2765

054_小驰私房菜_Camx i2c读写相关备忘

Camera 对Ae、Af这些控制,实际都是,最终实际都是落实到hal下发相关的指令给驱动,那hal这边是怎么给驱动下发相关命令的呢?#小驰私房菜054# #Qcom Camx#可以参考看下下面相关代码内容。

149

Codeforces Round 953 (Div.2)

CF953

djhws144的博客 1054

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Codeforces Round 953

Codeforces Round 953

青少年趣味编程 969

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛,也是成功在中途打进前1500,写完第三道题的时候也是保持在1600左右,但是后面就啥都不会了,还吃了点罚时,虽说如此也算是看到进步了,D题学长说很简单,但是我当时分析错了,出了一点小问题,不然最后也能定格在2000左右,下次加油。题意:就是说给你n本书,让你从中间分开,阅读边编号最大的那本书,然后问你最多能读多少页,这个很简单,最后一本书肯定是要读的,我们只需要遍历从1到~n-1本书,找到那本书页数最多然后加起来就OK了。

2301_80475191的博客 1834

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++ 高性能编程(一)

如今的 C++为程序员提供了编写富有表现力和健壮的代码的能力,同时仍然可以针对几乎任何硬件平台,并且同时满足性能关键的要求。这使得 C++成为一种独特的语言。在过去的几年里,C++已经变成了一种更有趣、具有更好默认值的现代语言。本书旨在为你提供编写高效应用程序的坚实基础,以及现代 C++中实现库的策略的洞察。我试图以实用的方式来解释当今的 C++是如何工作的,其中 C++17 和 C++20 的特性是语言的自然部分,而不是从历史上看待 C++。本书的第二版是为了涵盖 C++20 新增的功能而撰写的。

龙哥盟 2480

Codeforces Round 953 (Div. 2 ABCDEF题) 视频讲解

Codeforces Round 953 (Div. 2)(A ~ F 题讲解)

Edward Shi的博客 966

视频隐私脱敏工程化: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

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 217
上一篇: 信息学一周赛事安排(6.21~6.27)
下一篇: AtCoder Beginner Contest 359 A~F
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值