Codeforces Round 1054(d3)ABCDEF题解

Labview及NI-USRP驱动安装教程 软件下载 安装使用的LabVIEW2018及NI-USRP驱动程序已上传,下载地址: 天翼云盘链接 (访问码:oc33) 百度网盘链接 (提取码:88mi) (注:天翼云盘下载不限速) LabVIEW2018安装步骤 右键软件压缩包选择解压至LabVIEW2018 选中文件,鼠标右击选择以管理员身份打开2018LV-WinChn.exe文件。 点击确定。 点击Unzip解压。 点击确定。 点击下一步。 填写任意信息后,点击下一步。 点击下一步。 点击浏览更改安装路径建议安装到除C盘以 阅读详情

题目列表传送门

A. Be Positive

题目概述:给你一个大小为n的数组a,数组仅由-1,0,1组成,每次可以选择一个数字加1,求出最小操作次数使得整个数组的所有元素乘积为正

思考过程:对每个0都必须使用一次操作变为1,对于1不用管,-1的话若为偶数个则不用管,奇数个则次数+2变为1

算法:构造

时间复杂度:O(n)

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n;

inline void work()
{
    cin >> n;
    int num_1 = 0,res = 0;
    ef(1,n,i)
    {
        int x;
        cin >> x;
        if(x==0)
            res++;
        if(x==-1)
            num_1++;
    }
    if(num_1&1)
        res+=2;
    cout << res << endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

B. Unconventional Pairs

题目概述:给你一个偶数n和n个数字,需要将这些数字两两配对,计算出每个配对的差值,使得整体的最大差值最小,输出这个差值

思考过程:要想使得整体的差值最小化,必须使得每个的差值最小化,不妨将数组进行排序,这样可以保证对于每个数而言,与之差值最小的数就在旁边,然后输出答案即可

算法:构造,排序

时间复杂度:O(n)

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n;

inline void work()
{
    cin >> n;
    vector<int> v(n);
    nf(0,n,i)cin>>v[i];
    sort(v.begin(),v.end());
    int res = -0x3f3f3f3f;
    nf(0,n,i)
    {
        if(i&1)
        {
            res = max(res, abs(v[i] - v[i - 1]));
        }
    }
    cout << res << endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

C. MEX rose

题目概述:给你一个长度为n的数组a和一个数字k,其0<=k<=n,你每次可以选择数组中的一个数,使其变为[0,n]的任何一个数,问最少修改多少次能使得整个数组的MEX变为k

思考过程:对于数组中a[i]==k的数来说,这些数是必须修改的,我们将其设为w1,我们可以统计<k的数字还需要添加多少个,我们将其设为w2,如果w1>=w2,那么答案为w1,否则为w2

算法:贪心

时间复杂度:O(n)

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n, k;
int a[N];

inline void work()
{
    cin >> n >> k;
    ef(1,n,i)cin>>a[i];
    unordered_map<int, int> um;
    ef(1,n,i)
    {
        um[a[i]]++;
    }
    int w = 0;
    nf(0,k,i)
    {
        if(um[i]==0)
            w++;
    }
    if(um[k]>=w)
        cout << um[k] << endl;
    else
        cout << w << endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

D. A and B

题目概述:给你一个长度为n的字符串s,其只由a和b两种字符组成,每次你可以选择两个相邻的字符进行交换,问最少多少次交换可以使得整体的s成为一个aaabbbaaa或bbbaaabbb或aaabbb这样的区块形式

思考过程:转化题意:我们需要把其中一种字符变成一个区块,然后我们可以对整体进行一个推导

写法1:

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n;
string s;

inline void work()
{
    cin >> n;
    cin >> s;
    s = ' ' + s;
    vector<int> apos;
    vector<int> bpos;
    ef(1,n,i)
    {
        if(s[i]=='a')
            apos.emplace_back(i);
        else
            bpos.emplace_back(i);
    }
    int res1 = 0, res2 = 0;
    if(apos.size()>=2)
    {
        int mid = apos.size() / 2;
        int pos = apos[mid] - mid;
        nf(0,apos.size(),i)
        {
            res1 += abs(pos + i - apos[i]);
        }
    }
    if (bpos.size() >= 2)
    {
        int mid = bpos.size() / 2;
        int pos = bpos[mid] - mid;
        nf(0, bpos.size(), i)
        {
            res2 += abs(pos + i - bpos[i]);
        }
    }
    cout << min(res1,res2) << endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

写法2:将左右两端的字符往中间的字符移动,同样用到了中位数的原理

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n;
string s;

inline void work()
{
    cin >> n;
    cin >> s;
    s = ' ' + s;
    vector<int> apos;
    vector<int> bpos;
    ef(1,n,i)
    {
        if(s[i]=='a')
            apos.emplace_back(i);
        else
            bpos.emplace_back(i);
    }
    int res1 = 0, res2 = 0;
    if(apos.size()>=2)
    {
        int mid = apos.size() / 2;
        int w = 1;
        rf(mid-1,0,i)
        {
            res1 += abs(apos[mid] - w - apos[i]);
            w++;
        }
        w = 1;
        ef(mid+1,apos.size()-1,i)
        {
            res1 += abs(apos[mid] + w - apos[i]);
            w++;
        }
    }
    if (bpos.size() >= 2)
    {
        int mid = bpos.size() / 2;
        int w = 1;
        rf(mid - 1, 0, i)
        {
            res2 += abs(bpos[mid] - w - bpos[i]);
            w++;
        }
        w = 1;
        ef(mid + 1, bpos.size() - 1, i)
        {
            res2 += abs(bpos[mid] + w - bpos[i]);
            w++;
        }
    }
    cout << min(res1,res2) << endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

算法:字符串构造

时间复杂度:O(n)

E. Hidden Knowledge of the Ancients

题目概述:给你四个数字n,k,l,r和一个长度为n的数组,要求出有多少个不同的区间使得长度为[l,r]的时候恰好包含k个不同的数

思考过程:观察数据量我们需要一个O(n)或者O(nlogn)左右的算法,考虑区间问题很容易想到双指针,我们可以从头到尾遍历右区间r,然后对于每个右区间的答案就是他对应的左区间的合理范围,这部分我们可以通过map来实现对数字出现次数的统计

注意:这里的map要使用红黑树map而不是哈希表为底层的unordered_map,被这个问题卡了好久),因为尽管理想情况下哈希表会更快,但是如果遇到极端的哈希冲突,时间复杂度会提高到O(n),使得整体的时间复杂度提高到O(n^2)的水平,而map平均为logn,正好可以使得整体时间复杂度为O(nlogn),这道题的数据恰好hack了极端的哈希冲突,所以必须使用map来存

算法:双指针,枚举

时间复杂度:O(nlogn)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int n,k,L,R;
int a[N];
map<int, int> mp;
int numl[N], numr[N]; //符合条件下  numl:对应r的l最左边,numr:对应r的l最右边

inline void work()
{
    cin >> n >> k >> L >> R;
    ef(1, n, i) cin >> a[i];
    mp.clear();
    memset(numl, 0, sizeof numl);
    memset(numr,0,sizeof numr);
    //预处理numl
    int l = 1;
    ef(1,n,r)
    {
        mp[a[r]]++;
        while(mp.size()>k)
        {
            mp[a[l]]--;
            if(mp[a[l]]==0)
            {
                mp.erase(a[l]);
            }
            l++;
        }
        if(mp.size()==k)
            numl[r] = l;
    }
    //预处理numr
    mp.clear();
    l = 1;
    ef(1, n, r)
    {
        mp[a[r]]++;
        while (mp.size() >= k)
        {
            mp[a[l]]--;
            if (mp[a[l]] == 0)
            {
                mp.erase(a[l]);
            }
            l++;
        }
        if(l>1)
        {
            l--;
            mp[a[l]]++;
            if(mp.size()==k)
            {
                numr[r] = l;
            }
        }
    }
    int res = 0;
    ef(1,n,i)
    {
        int lmm = max(numl[i],i-R+1);
        int lma = min(numr[i], i - L + 1);
        if(lmm<=lma&&numl[i]&&numr[i])
        {
            res += lma - lmm + 1;
        }
    }
    cout<<res<<endl;
}

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

F. Nezuko in the Clearing

题目概述:给你两个数字h和d,表示一个人的初始生命值和终点位置,从起点0出发,每次经过一个节点可以选择休息或者前进,休息加一点生命值,前进消耗第i次连续前进值的生命值,每次操作增加一个回合数量,问最少需要多少回合才能到达终点

思考过程:从数据范围来看需要一个方法可以快速搜索答案,而对于一个位置而言,休息一次再走一次必然优于连续休息两次,所以每个点位最多只能休息一次,而对于每次前进,我们可以将路程尽可能的拆成平均的线段,这样我们就可以在指定的休息次数下保证走完全程,而休息次数我们用二分来查找

算法:二分搜索,数学

时间复杂度:O(logd)

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ef(a, b, i) for (int i = a; i <= b; i++)
#define nf(a, b, i) for (int i = a; i < b; i++)
#define rf(a, b, i) for (int i = a; i >= b; i--)
#define endl '\n'
typedef pair<int, int> PII;
#define Hope_AC ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);

const int N = 2e5 + 10;

int t;
int h, d;

bool check(int x)
{
    int num = x + 1;
    int w = d / num;
    int s = d % num;
    int need = s * (w + 1) * (w + 2) / 2 + (num - s) * w * (w + 1) / 2;
    return need < h + x;
}

inline void work()
{
    cin >> h >> d;
    int l = 0, r = d + 1;
    while(l<r)
    {
        int mid = l + r >> 1;
        if(check(mid))
        {
            r = mid;
        }
        else
        {
            l = mid + 1;
        }
    }
    cout << d + l << endl;
}   

signed main()
{
    Hope_AC;
    cin >> t;
    while (t--)
    {
        work();
    }
    return 0;
}

SAP_通用模块-MASS批量操作技巧 SAP_MM模块-MASS/MM17批量更新主数据详细教程 阅读详情

相关推荐

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

Codeforces Round 1054 (Div. 3)(赛时 Solve 5题,A-E 题解)

给你一个长度为 nnn 的数组,每个元素都是 −1,0-1,0−1,0 或者 111。 你可以执行操作:把其中一个元素 +1+1+1 求使得 整个数组乘积 严格大于 000 的 最少操作次数首先,对于每个等于 000 的元素,都至少需要执行 111 次操作。 其次,对于 −1-1−1,由于要保证 ∏i=1nai≥1\prod_{i=1}^{n} a_i \geq 1∏i=1n​ai​≥1,所有 −1-1−1 的乘积 需要等于 111。考虑到最少操作次数,所以如果 −1-1−1 的频数等于奇数的话,我们需要进

Transient_ovo的博客 1073

汽水音乐自动化薅羊毛教程:从零搭建稳定赚钱脚本

📖 前言:为什么要学习自动化脚本?在数字时代,时间就是金钱。汽水音乐等App通过观看广告奖励用户金币的模式,本质上是将我们的时间转化为收益。本教程将教你如何用Python自动化这个过程,让程序为你"打工",实现被动收入。通过本教程,你将学到:移动端自动化测试的核心技术Python在自动化领域的实际应用如何将重复性任务转化为自动化流程创造属于自己的"数字员工"第一章:环境准备与基础配置1.1 硬件要求Android手机一部(建议使用备用机)USB数据线。

weixin_44947827的博客 5794

Codeforces Round 1054 (Div. 3)-G. Buratsuta 3

这道题目可以说是很典的一个题目,解法很多,适合练习,这里给出随机选数、摩尔投票、主席树,三种解法。题意:给定一个数组,有q次询问,每次询问该数组的一个区间[ l ,r ] ,让你找出其中出现超过的数,并且输出。

python_yyd的博客 349

PLDM入门(七):FRU Data Format

每个字段为TLV(Type-Length-Value)格式,具体类型、长度范围和值定义需参考。通过条件过滤(记录句柄、类型、字段类型等)分块获取FRU记录数据(可选功能)。整个FRU数据表由多个FRU记录数据块组成,每个数据块对应表2的结构(即包含。决定,每个字段按顺序排列(Type→Length→Value)通过分块传输方式写入FRU记录表数据(需终端支持写入操作)。(文档未提供表5内容,需结合标准文档完整版)。、字段数量、编码类型及具体字段的TLV数据)。无请求数据(空请求)。

weixin_44032634的博客 1762

告别IMEI!手把手教你用UUID实现Android设备唯一标识(兼容Android 10-13)

本文详细探讨了在Android 10及以上版本中,如何构建合规且高可用的设备唯一标识方案以替代被限制访问的IMEI。文章深入分析了Android设备标识符的演变,并提供了基于UUID/GUID的完整实现策略,包括生成算法、多级持久化存储方案(如MediaStore)、权限处理以及版本兼容性实践,帮助开发者应对Android 10-13的隐私政策变化。

weixin_28339967的博客 574

Codeforces Round 1054 (Div. 3)

Link。

weixin_52264062的博客 883

CMOS的宽/长比、传输门与三态门、锁存器与触发器、简单版图、竞争与冒险

目录 1.CMOS的宽长比 2.传输门与三态门 传输门 三态门 3.锁存器与触发器 3.1RS锁存器[3] 3.2D锁存器 3.3D触发器 4.简单CMOS器件的版图 5.竞争与冒险 1.CMOS的宽长比 关于COMS原理及结构图可以参考[1]COMS原理及门电路设计. 栅在源漏方向的长度称作栅的长L,垂直方向称为栅的宽W,如图1中NMOS的版图。 图1 以MOS管...

king阿金 1万+

Codeforces Round 1054 (Div. 3)(A~D)

本文分享了Codeforces Div.3比赛中A、B、C、D四道题的解题思路和代码实现。A题要求通过最少操作使数组乘积为正,需消除0并确保负数为偶数;B题通过排序和二分查找最小化配对最大差值;C题分析如何使MEX等于k,计算缺失数和k出现次数的较大值;D题针对字符串处理,通过中位数优化交换操作次数,使某字符形成连续块。文章详细讲解了每道题的算法逻辑和具体实现,适合编程竞赛练习者参考。

2402_89341493的博客 1605

基于51单片机的简易计算器设计(原理图+仿真+源代码+参考论文)

本设计以51单片机为核心,矩阵键盘输入数字,通过1602显示屏显示计算结果,能够实现整数的加、减、乘、除四则运算,具备清除功能。

u012759563的博客 7702

分子模拟入门教程 | 低调使用 建议收藏

该方法只需要原子的核电荷和少数模拟的环境参数作为输入,所有的性质都是通过求解薛定谔方程得到的,不需要使用任何经验参数。经典的原子水平的分子模拟已经成为提高我们对材料科学和生命系统中分子过程理解的最流行的方法之一。全原子模拟是一种非常强大的以原子分辨率呈现信息的方法,因为在原子模拟中,一个粒子代表一个特定的原子。随着计算机硬件和模拟技术的快速发展,分子模拟不仅可以解决基本的、常规的化学问题,还可以应用于各种复杂体系。然而,由于问题的复杂性以及严重依赖于现象的现实情况,最好是逐案确定合适的模拟方法。

pysonger的博客 783

Codeforces Round 1054 B. Unconventional Pairs(2149)

通过最后提示:可以发现,是偶数个元素,并且成对出现是排序过,然后求2个数之差,然后取最大的差值。说明:不能用冒泡排序,当测试数据2万条的时候,就会超时,根据之前排序方法,只有快速排序。最小可能的,最大差值,在元素的对对中,根据NOTE就可以推理出来。根据题意,是求,成对出现的数据之差,其差值,最大的是?参考和别人的代码,消化理解完成。

191

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

Codeforces Round 1054

这篇文章汇总了Codeforces Round 1054 (Div.3)的相关资源,包括多个B站视频链接(涵盖赛时实况、题目讲解、AK记录等)和优快云博客(提供A-G题解、赛况总结、技术分析等)。内容涉及比赛题目解析、参赛经验分享以及相关扩展题目(如1031-1040轮次)的参考资料,适合参赛者复盘学习或备赛参考。

青少年趣味编程 385

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

关于vp Codeforces Round 1054 (Div. 3)的收货

对于第二个条件,我们要的是删,删去全部才行。而因为必然能得到合法构造,所以我们不必担心没有补 的原料,所以如果删的把补的补完了 ,也就是代码中的cnt1 > cnt,那么我们只删就行了,如果删的不够补,那么把删的用完之后(包含在补的范围内),那么补的后面直接换1:1的次数就够了,这样的结果就是cnt。主要是对整体的积进行分类讨论,积为1,就返回0,积为0,则需要把所有0排除,从而使积必然不为0,积为-1,则需要将必然存在的-1加2使积为1(因为不难得出只需要一个-1变成1就能改变积)。

wsykszzrqz的博客 418

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Codeforces Round 1054(Div. 3)A-C 题解

本文包含三个编程问题的解法: A题:通过统计处理使数组乘积为正的最小操作次数。先处理0元素,再根据负数数量奇偶性决定是否额外操作。 B题:求排序后数组中相邻元素差的最大值。将数组排序后遍历比较相邻元素差值。 C题:计算使数组MEX为k的最小操作数。统计缺失的小于k的数和多余k的个数,取较大值作为结果。 三题均使用C++实现,涉及数组处理、排序和集合操作等算法。

Me_nb的博客 337

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

Mysssone的博客 248

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

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

wuqingyigexiaoba的博客 320

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 193

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

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序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的博客 596

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 126

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

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

2503_92261635的博客 22

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 357

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

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

2501_94316951的博客 172

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 414

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

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

weixin_44218929的博客 89
上一篇: Codeforce:B. Catching the Krug
下一篇: Codeforce Round 1076(d2) ABCD题解
JiaWei_ccc
博客等级 码龄2年 118粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值