Educational Codeforces Round 165 (Div. 2) A~E

【电力负荷预测】项目介绍 MATLAB实现基于BO-Transformer-LSTM贝叶斯优化算法(BO)优化Transformer-LSTM组合模型进行居民用户多步电力负荷预测(含模型描述及部分示例 内容概要:本文介绍了一个基于BO-Transformer-LSTM的组合模型,用于实现居民用户多步电力负荷预测的完整项目实例。该模型融合Transformer的全局注意力机制与LSTM的局部时序记忆能力,构建能够捕捉长时依赖与周期性特征的深度学习架构,并引入贝叶斯优化(BO)自动搜索最优超参数组合,提升预测精度与训练效率。项目涵盖从原始数据清洗、特征工程、滑动窗口样本构建、模型设计到超参数优化、反归一化及多步误差评估的全流程,强调时间顺序划分以防止信息泄露,并通过周期编码、外生变量融合等方式增强数据表达能力。文中提供了详细的MATLAB代码示例,包括数据预处理、网络搭建、贝叶斯优化配置和预测结果评估等关键步骤。 适合人群:具备一定机器学习和时间序列分析基础,熟悉MATLAB编程环境,从事电力系统预测、智能电网、负荷管理等相关领域的研究人员、工程师及研究生。 使用场景及目标:①应用于居民级或多用户聚合负荷的短期至中期多步预测(如未来24小时);②服务于配电系统运行调度、需求响应基线设定、家庭能源管理系统优化、分布式能源协调控制等实际工程场景;③为科研提供可复现的深度学习+贝叶斯优化的技术路线参考。 阅读建议:此资源以实际项目为导向,建议读者结合提供的代码逐步实现并调试模型,重点关注数据质量控制、时间特征编码、组合网络结构设计与贝叶斯优化稳定性之间的协同关系,在实践中深入理解多步预测中的误差累积机制与超参数敏感性问题。 立即下载

A.Two Friends (思维)

题意:

小AAA想开一个派对。他有nnn个朋友,他希望至少有222个朋友参加他的派对。
iii 这个朋友最好的朋友是 pip_ipi​ 。所有的 pip_ipi​ 都是不同的,对于每一个 i∈[1,n]i \in [1, n]i∈[1,n] ,pi≠ip_i \ne ipi​=i 都是不同的。
小AAA可以向朋友发出邀请。如果第 iii 个朋友和第 pip_ipi​ 个朋友都收到了邀请,那么第 iii 个朋友就会来参加聚会(注意,第 pip_ipi​ 个朋友不必真的来参加聚会)。每份邀请函都恰好发给其中一位朋友。
计算至少要发出多少份邀请函,才能让朋友来参加聚会?

分析:

如果有两人互为最好朋友则发两张,否则三张必定能解决。

代码:

#include <bits/stdc++.h>

using namespace std;
const int N = 1e6 + 5;
int a[N];

int main() {
    int t;
    cin >> t;
    while (t--) {
        int flag = 0;
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
        for (int i = 1; i <= n; i++) {
            if (a[a[i]] == i)
                flag = 1;
        }
        if (flag)
            cout << 2 << endl;
        else
            cout << 3 << endl;
    }
    return 0;
}

B.Shifts and Sorting (思维)

题意:

给定一个只含010101的二进制序列,每次可选择一段序列将其尾元素移至首位,代价为序列长度,问最少用多少代价可以构造一个非降序序列。

分析:

问题等价于将所有的000移到111前面,一次最多把一个000移到111前面对。并且对于一个000,最少的操作数一定是前面111的个数+1+1+1。只需要统计前缀的111的个数即可。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int t;
    cin >> t;
    while (t--) {
        string s;
        cin >> s;
        LL num = 0;
        LL ans = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '1')
                num++;
            else if (num)
                ans += num + 1;
        }
        cout << ans << endl;
    }
    return 0;
}

C.Minimizing the Sum (dp)

题意:

给你一个长度为 nnn 的整数数组 aaa。可以执行以下操作:选择数组中的一个元素aia_iai​,使得ai+1=aia_{i+1}=a_iai+1​=ai​或者ai−1=aia_{i-1}=a_iai−1​=ai​。
你的任务是计算执行最多 kkk 次上述操作数组的最小总和。

分析:

dp[i][j]dp[i][j]dp[i][j]表示前iii个数,执行了jjj次操作的最小和。从左到右枚举当前最小值的位置iii,枚举操作数xxx,操作是把一个区间的值都变成最小值aia_iai​,区间长度是x+1x+1x+1,可以直接枚举区间的左边界lll ,区间右边界就是r=l+xr=l+xr=l+x。有转移方程:dp[r][t+x]=min(dp[r][t+x],dp[l−1][t]+(a[i]∗(x+1)));dp[r][t+x]=min(dp[r][t+x],dp[l-1][t]+(a[i]*(x+1)));dp[r][t+x]=min(dp[r][t+x],dp[l−1][t]+(a[i]∗(x+1)));。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;
        vector<LL> a(n + 1), s(n + 1);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        vector<vector<LL>> dp(n + 1, vector<LL>(k + 1, 1e16));
        dp[0][0] = 0;
        for (int i = 1; i <= n; i++) {
            for (int x = 0; x <= k; x++) {
                for (int l = i; l >= i - x && l >= 1; l--) {
                    int r = l + x;
                    if (r > n)
                        continue;
                    for (int t = 0; t <= k - x; t++) {
                        dp[r][t + x] = min(dp[r][t + x], dp[l - 1][t] + (a[i] * (x + 1)));
                    }
                }
            }
        }
        LL ans = 1e16;
        for (int i = 0; i <= k; i++) {
            ans = min(dp[n][i], ans);
        }
        cout << ans << endl;
    }
    return 0;
}

D. Shop Game (贪心)

题意:

总共有nnn件商品,AliceAliceAlice可以用aia_iai​的价格购入,BobBobBob可用bib_ibi​的价格从AliceAliceAlice处购买,并且BobBobBob可以不花钱获得额外的kkk件物品,询问双方在最优策略下,AliceAliceAlice可获得的收益最大为多少。

分析:

我们按照bib_ibi​的值从大到小排序。枚举边界iii,从1−i1-i1−i的部分选kkk个,i+1−ni+1-ni+1−n部分任意选择。1−i1-i1−i部分选的kkk个一定是这次选择里最大的kkk个bbb,这部分选的某个位置对答案的贡献是−ai-a_i−ai​,将问题转化成选择kkk个最小的aia_iai​,因此维护一个aia_iai​单调队列。
考虑到i+1−ni+1-ni+1−n部分任意选,由于最大的kkk个bbb已经选了,这部分选的某个位置对答案的贡献是bi−aib_i-a_ibi​−ai​。因为这部分是任意选的,为了让答案更大,对答案的贡献就是bi−aib_i-a_ibi​−ai​结果为正值的和。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n, k;
        cin >> n >> k;
        vector<int> a(n), b(n);
        for (int i = 0; i < n; i++)
            cin >> a[i];
        for (int i = 0; i < n; i++)
            cin >> b[i];
        vector<int> tmp(n);
        iota(tmp.begin(), tmp.end(), 0);
        sort(tmp.begin(), tmp.end(), [&](int x, int y) {
            if (b[x] == b[y]) return a[x] > a[y];
            return b[x] > b[y];
        });
        LL ans = 0;
        LL l = 0, r = 0;
        priority_queue<int> p;
        for (int i = 0; i < k; i++) {
            int j = tmp[i];
            p.push(a[j]);
            l -= a[j];
        }
        for (int i = k; i < n; i++) {
            int j = tmp[i];
            r += max(0, b[j] - a[j]);
        }
        ans = max(ans, l + r);
        for (int i = k; i < n; i++) {
            int j = tmp[i];
            p.push(a[j]);
            l -= a[j];
            l += p.top();
            p.pop();
            r -= max(0, b[j] - a[j]);
            ans = max(ans, l + r);
        }
        cout << ans << endl;
    }
    return 0;
}

E. Unique Array (数据结构)

题意:

给你一个长度为 nnn 的整数数组 aaa 。 如果有一个整数在aaa的子段中恰好出现一次,那么这个子段就是唯一的。
现在可以执行以下任意次数(可能为零)的操作:从数组中选择一个元素,然后用任意整数替换它。
你的任务是计算上述操作的最少次数,以使数组 aaa 的所有子段都是唯一的。

分析:

首先对于每个位置aia_iai​,找到其前面和后面第一个与之相同的位置记为preipre_iprei​和nxtinxt_inxti​,那么对于aia_iai​,能使得所有l∈[prei+1,i],r∈[i,nxti−1]l \in [pre_i+1,i],r \in [i,nxt_i-1]l∈[prei​+1,i],r∈[i,nxti​−1]的区间都变得符合要求。
这符合二维数点,通过用扫描线找到不满足要求的区间。假设对于每个点iii作为右端点时,其最大的不满足要求的左端点为lil_ili​。我们可以按照lil_ili​排序,然后每次贪心地修改最大的lil_ili​,然后记录修改过的最小的为lil_ili​为minvalminvalminval,可以发现如果某些i≥minvali \ge minvali≥minval,那么这个位置也不再需要修改了,可以跳过。可以发现这样是最优的。

代码:

#include <bits/stdc++.h>

using namespace std;
const int mod = 998244353;
const int INF = 1e9;
struct Info {
    int mn = INF, mnnow = 0;
};
using Tag = int;

Info operator+(const Info &a, const Info &b) {
    return a.mn < b.mn ? a : b;
}

void apply(Info &x, Tag &a, Tag f) {
    x.mn += f;
    a += f;
}

template<class Info, class Tag>
struct LazySegmentTree {
    int n;
    vector<Info> info;
    vector<Tag> tag;

    LazySegmentTree() {}

    LazySegmentTree(int n, Info _init = Info()) {
        init(vector<Info>(n, _init));
    }

    LazySegmentTree(const vector<Info> &_init) {
        init(_init);
    }

    void init(const vector<Info> &_init) {
        n = (int) _init.size();
        info.assign((n << 2) + 1, Info());
        tag.assign((n << 2) + 1, Tag());
        function<void(int, int, int)> build = [&](int p, int l, int r) {
            if (l == r) {
                info[p] = _init[l - 1];
                return;
            }
            int m = (l + r) / 2;
            build(2 * p, l, m);
            build(2 * p + 1, m + 1, r);
            pull(p);
        };
        build(1, 1, n);
    }

    void pull(int p) {
        info[p] = info[2 * p] + info[2 * p + 1];
    }

    void apply(int p, const Tag &v) {
        ::apply(info[p], tag[p], v);
    }

    void push(int p) {
        apply(2 * p, tag[p]);
        apply(2 * p + 1, tag[p]);
        tag[p] = Tag();
    }

    void change(int p, int l, int r, int x, const Info &v) {
        if (l == r) {
            info[p] = v;
            return;
        }
        int m = (l + r) / 2;
        push(p);
        if (x <= m) {
            change(2 * p, l, m, x, v);
        } else {
            change(2 * p + 1, m + 1, r, x, v);
        }
        pull(p);
    }

    void change(int p, const Info &v) {
        change(1, 1, n, p, v);
    }

    Info ask(int p, int l, int r, int x, int y) {
        if (l > y || r < x) {
            return Info();
        }
        if (l >= x && r <= y) {
            return info[p];
        }
        int m = (l + r) / 2;
        push(p);
        return ask(2 * p, l, m, x, y) + ask(2 * p + 1, m + 1, r, x, y);
    }

    Info ask(int l, int r) {
        return ask(1, 1, n, l, r);
    }

    void change(int p, int l, int r, int x, int y, const Tag &v) {
        if (l > y || r < x) {
            return;
        }
        if (l >= x && r <= y) {
            apply(p, v);
            return;
        }
        int m = (l + r) / 2;
        push(p);
        change(2 * p, l, m, x, y, v);
        change(2 * p + 1, m + 1, r, x, y, v);
        pull(p);
    }

    void change(int l, int r, const Tag &v) {
        return change(1, 1, n, l, r, v);
    }
};

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n;
        cin >> n;
        vector<int> pre(n + 1), nxt(n + 1);
        vector<int> a(n + 1);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        {
            vector<int> last(n + 1);
            for (int i = 1; i <= n; i++) {
                pre[i] = last[a[i]];
                last[a[i]] = i;
            }
        }
        {
            vector<int> last(n + 1, n + 1);
            for (int i = n; i >= 1; i--) {
                nxt[i] = last[a[i]];
                last[a[i]] = i;
            }
        }
        vector<vector<pair<int, int>>> now(n + 1);
        for (int i = 1; i <= n; i++) {
            now[nxt[i] - 1].push_back({i, 1});
            now[i - 1].push_back({i, 0});
        }
        vector<Info> init(n);
        for (int i = 0; i < n; i++) {
            init[i] = {0, i + 1};
        }
        LazySegmentTree<Info, Tag> seg(init);
        set<pair<int, int>> s;
        for (int i = n; i >= 1; i--) {
            for (auto [x, type]: now[i]) {
                if (type) {
                    seg.change(pre[x] + 1, x, 1);
                } else {
                    seg.change(pre[x] + 1, x, -1);
                }
            }
            auto [mn, mnnow] = seg.ask(1, i);
            if (mn == 0) {
                s.insert({mnnow, i});
            }
        }
        int ans = 0;
        int tmp = n + 1;
        while (!s.empty()) {
            if (prev(s.end())->second >= tmp) {
                s.erase(prev(s.end()));
            } else {
                ans += 1;
                tmp = prev(s.end())->first;
                s.erase(prev(s.end()));
            }
        }
        cout << ans << endl;
    }
    return 0;
}

赛后交流

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

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

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

Educational Codeforces Round 165 (Rated for Div. 2)(A~D)

思路:我们要从最左边开始把 1 逐步移动到序列的最右边。我们发现,对于一段连续的 1 和 0,如:11100,将这一部分变换为00111的代价就是。对于m+1个相邻的数,我们至多需要进行m次操作,使得这些数全部变为这些数中的最小值。思路:我们要求出修改若干次后的最小值,能够比较自然地想到 dp。因此为了方便,我们在设计状态时不能出现这样的情况。其中m为本次操作次数,j为原来的操作次数。为Bob所要拿走的物品的最小值,对于。的物品,这里用前缀和维护一下就好了。的物品,我们累加所有。

Fr1nGeLove的博客 940

2-shell及常用命令-续.pdf

2-shell及常用命令-续.pdf

Educational Codeforces Round 165

答案只会是2或3,分类一下就好了找规律,对于初始前面有1的0,一定要移动到前面去,最小代价是它前面1的个数再加1。

2301_79248730的博客 770

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3894

DLMS—Cryptographic algorithms—(Green-Book)加密算法

密码学是数学的一个分支,基于数据的转换,并且可以用来提供多种安全服务:保密性、数据完整性、认证、授权和不可否认性。密码学依赖于两个基本组成部分:算法(或密码学方法)和密钥。算法是一个数学函数,而密钥是在转换过程中使用的参数。密码算法和密钥用于对数据应用密码保护(例如,加密数据或生成数字签名),以及移除或检查保护(例如,解密加密的数据或验证数字签名)。密码哈希函数:这类函数不需要密钥(尽管它们可以以使用密钥的模式使用)。哈希函数通常用作算法的一个组成部分,以提供安全服务。见9.2.3.2节。对称密钥算法。

一个bug是bug,多个bug能work 1708

Codeforces Round 165(Div.2)

教育场,最近也是蓝桥杯打完了,第一次打,又菜又爱玩,很多题型都没见过,像学新东西一样,还有就是最后一题连线性筛也忘记了,不过本省比较友好(广西),以为预定省4了,没想到最后还是挤进了省2,继续努力吧,回到正题,蓝桥之后打的第一场,div2(连div3都打不过的小辣鸡来挑战一下div2)没想到最后还能写出两题,不过花了好长时间啊,一个半小时写两题,看来还得多练。耐心读了一下题目,要求是至少有2个朋友来, 分析得到,要让a去那么就要邀请a和a的朋友,这时候a就一定会去(b去不去随意)

yuyit_的博客 945

PDPS16.0单机版与SPLMLicenseServer授权避坑指南:从安装到冲突解决

本文详细解析了PDPS16.0单机版的安装与授权流程,重点阐述了如何正确配置SPLMLicenseServer本地许可证服务器以实现软件激活。针对安装过程中常见的许可证冲突问题,提供了清晰的排查思路和解决方案,并介绍了通过设置环境变量等替代授权方法,帮助用户高效避坑,确保Tecnomatix Process Simulate顺利运行。

weixin_29231221的博客 563

Educational Codeforces Round 165 (Rated for Div. 2 ABCDE 题)视频讲解

Educational Codeforces Round 165 (Rated for Div. 2)(A ~ E 题视频讲解)

Edward Shi的博客 1824

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2667

基于DeepFashion2和YOLOv12的服装检测系统:从数据集构建到UI界面实现

官方网站:数据集大小: 约80GB(压缩包)包含训练集、验证集和测试集数据集目录结构:text复制下载├── train/└── test/├── image/├── annos/Backbone优化:使用更高效的CSPNet结构Neck增强:引入BiFPN特征金字塔网络Head改进:使用解耦头(Decoupled Head)提升分类和定位精度损失函数:采用CIoU损失和分类Focal Loss训练策略:引入Mosaic数据增强和自适应锚框python复制下载。

YOLO 498

Educational Codeforces Round 165 (Rated for Div. 2)[A~D]

这场签到很快那会rank1400吧,但到c就写不动了,最后排名也是3000左右,可见很多人其实都不会写dp。快速签到也很重要啊!!

m0_74183164的博客 1095

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1607

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

寄寄寄寄摆摆摆摆

weixin_61825750的博客 1343

2024年ERP管理系统职业技能大赛软件测试赛项-测试报告

【说明本次测试的最终测试结果总结、测试过程中遇到的重要问题以及如何解决、被测系统的质量结论、个人的收获以及团队的得失等】【说明编写本测试报告的目的和实际读者】【说明本次测试实际人员安排及主要职责】【说明本次测试使用的测试用例设计方法】【说明本次测试使用的测试方法】【针对本次测试进行Bug汇总】【针对本次测试进行用例汇总】【说明本项目的背景情况】【说明本次测试的实际。

Code is fun. 787

A2A 协议详解:Agent Card 的设计与实现

Agent Card 是 Agent2Agent (A2A) 协议中实现智能体发现与互操作性的核心组件。本文将深入剖析 Agent Card 的设计理念、关键字段及其在智能体生态系统中的作用。我们将通过详细的 JSON Schema 解析和 Python SDK 示例,帮助您理解如何精确地定义和发布智能体能力,为构建可发现、可协作的 AI 智能体奠定基础。当您使用a2a.Agent类初始化一个智能体时,SDK 会根据您提供的参数(nameversion等)自动构建内部的 Agent Card 表示。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1476

Educational Codeforces Round 165 (Rated for Div. 2) D. Shop Game

思路:alice先把所有商店价格低于alice价格的都买掉,然后bob从中选择k个alice价格最贵的,然后alice每次少买商店价格最大的一个若少买的这一个为bob选择的则从剩下的再选一个最贵的,若不是bob已经选择的则bob的花费将该物品的alice减去。

xiaolemyzq的博客 247

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Educational Codeforces Round 112(Div.2) ABC题解

D题好像可以做一做,挖个坑以后做好了来填(doge Educational Codeforces Round 112(Div.2) 题目列表 1.A 2.B 3.C 1.A 原题链接 题目大意 有三种方案做蛋糕,15分钟做6块蛋糕、20分钟做8块蛋糕、25分钟做10块蛋糕,输入人数,求做出大于等于人数的蛋糕数的最短时间。 解题思路 看上去像是背包贪心,但发现这三种方法的性价比是一样的。由找规律发现由6,8,10可以组成大于等于6的所有偶数,所以答案就出来了。我刚刚开始做的时候没有去找规律,认为选择一种方

漂流武士的博客 350

WINCC7.3破解文件

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

VC中sqlite的使用

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

Educational Codeforces Round 165 (Rated for Div. 2) E. Unique Array 贪心+线段树

区间修改 区间查询 线段树 懒标记 贪心 C++代码 附详细注释

一只摸鱼的bbc 1047

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Codeforces --- Round 943 (Div 3) - D and Educational Codeforces Round 165(Rated for Div 2) - B

找到从初始位置开始 每个玩家可以到达的位置,记录下来。然后循环遍历轮数,找到每次可以的最大得分。(因为可以继续停留在当前位置,这也是要计分的)。题目大意:有一个排列,由1-n数字组成的n个不太元素的数组。现在有两个人B和S玩游戏。数组a记录每个位置的价值,p就是排列数组,记录位置。他们两个选择了排列中的起始位置。找到得分最大的玩家。

2301_79679684的博客 437

Educational Codeforces Round 165 (Rated for Div. 2)

进行循环移位,这样就可以使得总成本最小。

2303_80261633的博客 236

Educational Codeforces Round 165 (Rated for Div. 2) A - D 解题

【代码】Educational Codeforces Round 165 (Rated for Div. 2) A - D 解题。

Xyrsis的博客 317

Educational Codeforces Round 165 (Div. 2) ( 3 / 6 )

【代码】Educational Codeforces Round 165 (Div. 2) ( 3 / 6 )

2302_79268945的博客 168

Educational Codeforces Round 165 (Rated for Div. 2)(C dp D贪心 E二维扫点)

有个结论:如果某个点到右端点不符合要求,那么只需要修改这个点就能保证前面的点都一定符合。D:如果物品确定,那么Bob为了最小化b数组的总和,肯定最最大的k个b。由于确定了使用那个最小值,那么他只会单调往左推或者往右推,所以dp。要求,即每个右端点存在一个最近的不符合的点,只需要修改一次即可。而alice则会最小化这k个b的a。所以用扫描线求出来最右的左端点即可。前i个点使用j次的最小值即可。且肯定要修改最大的左端点。

qq_61657632的博客 473

E - The Contest Educational Codeforces Round 76 (Rated for Div. 2)

A team of three programmers is going to play a contest. The contest consists of n problems, numbered from 1 to n. Each problem is printed on a separate sheet of paper. The participants have decided t...

weixin_44828107的博客 123

Educational Codeforces Round 76 E. The Contest (最长不下降子序列)

题目描述 A team of three programmers is going to play a contest. The contest consists of n problems, numbered from 1 to n. Each problem is printed on a separate sheet of paper. The participants have decided to divide the problem statements into three parts: t

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值