Codeforces Round #821 (Div. 2)

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例) 本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。 阅读详情

Codeforces Round #821 (Div. 2)

Dashboard - Codeforces Round #821 (Div. 2) - Codeforces

A. Consecutive Sum

思路

  • 贪心

选择一个连续 k k k个,因此等价于找到 m o d   k = 0 , 1 , 2.. , k − 1 mod\ k=0,1,2..,k-1 mod k=0,1,2..,k−1 的最大的 a a a 的和。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n >> k;
        for (int i = 1; i <= n; i ++) cin >> a[i];

        LL res = 0;
        for (int i = 1; i <= k; i ++) {
            int mx = 0;
            for (int j = i; j <= n; j += k)
                mx = max(mx, a[j]);
            res += mx;
        }

        cout << res << '\n';
            
    }
    return 0;
}

B. Rule of League

思路

  • 构造

由于第一轮一定有一个人输因此 x , y x,y x,y 里必须有一个 0 0 0,假设 x ! = 0 x!=0 x!=0如果接下来等价于是否让每个人均赢 0 / x 0/x 0/x轮,判断 x ∣ n − 1 x|n-1 x∣n−1是否成立即可,然后模拟就行。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        int x, y; cin >> n >> x >> y;
        if ((x && y) || (!x && !y)) cout << -1 << '\n';
        else {
            if (x < y) swap(x, y);
            if ((n - 1) % x != 0) cout << -1 << '\n';
            else {
                int cnt = (n - 1) / x;
                int id = 2;          
                while (cnt) {
                    for (int i = 1; i <= x; i ++) cout << id << ' ';
                    id += x;
                    cnt --;
                }                                     
                cout << '\n';
            }
        }
    }
    return 0;
}

C. Parity Shuffle Sorting

思路

  • 贪心

​ 假设有 1 , 2 , 1 1,2,1 1,2,1 我们发现无论如何都可以让 2 → 1 2\to 1 2→1,因此先将 a 1 , a n a_1,a_n a1​,an​ 搞成一样的,然后再将 i ∈ [ 2 , n − 1 ] i\in [2,n-1] i∈[2,n−1]都搞成和首尾一样的即可。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n;
        for (int i = 1; i <= n; i ++) cin >> a[i];
        vector<PII> res;        
        if (a[1] != a[n])
            if ((a[1] + a[n]) & 1) a[n] = a[1], res.push_back({1, n});
            else a[1] = a[n], res.push_back({1, n});

        for (int i = 2; i < n; i ++) {
            if ((a[i] + a[1]) & 1) res.push_back({1, i});
            else res.push_back({i, n});
        }

        cout << res.size() << '\n';
        for (auto t : res) cout << t.x << ' ' << t.y << '\n';
    }
    return 0;
}

D2. Zero-One (Hard Version)

题意

​ 给你两个字符串 a , b a,b a,b。你可以对 a a a 串进行如下操作,选择 [ l , r ] [l,r] [l,r] 将 a l ⊕ 1 , a r ⊕ 1 a_l\oplus 1,a_r\oplus 1 al​⊕1,ar​⊕1,如果 l + 1 = = r l+1==r l+1==r 花费 x x x,否则花费 y y y,问你将 a a a 变成 b b b 的最小花费是多少。

思路

  • d p dp dp

由于一次改变两个位置的值,因此当不同的位置为 o d d odd odd 的时候无解。

​ 首先 e a s y   v e r s i o n easy\ version easy version有 x ≥ y x\ge y x≥y 且 n ≥ 5 n\ge 5 n≥5,因此我们直接贪心,设不同位置有 c n t cnt cnt个,如果 c n t = = 2 cnt==2 cnt==2 且相邻 我们有两种操作方法,直接用 x x x,或者用两个 y y y,其余情况直接用 y y y 成对消除即可。

​ 对于 D 2 D2 D2,考虑 y > x y>x y>x 的情况就不好贪心了,我们先将 a a a和 b b b不同的位置取出来放到 c c c数组中,考虑 d p dp dp设 f [ l ] [ r ] f[l][r] f[l][r]:将 l , r l,r l,r 这个区间所有不同的位置消除的最小操作数(注意这里 的 l , r l,r l,r均是 c c c中的下标),那么对于 f [ l ] [ r ] f[l][r] f[l][r] 可以从哪些子状态转移过来呢,即考虑前一个操作,这里由于 y > x y>x y>x,如果用 y y y的话区间一定越长越优,否则可能被连续的 x x x 顶替掉,而如果操作相邻的话中间和两边均一样,因为会被子状态弄到。所以只会从 f [ l + 1 ] [ r − 1 ] , f [ l + 2 ] [ r ] , f [ l ] [ r − 2 ] f[l+1][r-1],f[l+2][r],f[l][r-2] f[l+1][r−1],f[l+2][r],f[l][r−2] 转移过来。

​ 对于任意两个点 ( i , j ) (i,j) (i,j) 合并,会有一下情况,如果 i + 1 = j i+1=j i+1=j 可以花费 m i n ( x , 2 × y ) min(x,2\times y) min(x,2×y) ,如果 i + 1 ! = j i+1!=j i+1!=j有 m i n ( y , ( j − i ) × x ) min(y,(j-i)\times x) min(y,(j−i)×x),因此转移的时候算一下贡献 即可。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N];
vector<int> ve;
LL x, y;
LL calc(int l, int r) {
    if (l + 1 == r) return min(x, y * 2);
    return min(y, x * (r - l));
}
LL f[5010][5010];
LL dfs(int l, int r) {
    if (r < l) return 0;
    if (f[l][r] != -1) return f[l][r];
    LL res = 1e18;
    res = min(res, dfs(l, r - 2) + calc(ve[r - 1], ve[r]));
    res = min(res, dfs(l + 2, r) + calc(ve[l], ve[l + 1]));
    res = min(res, dfs(l + 1, r - 1) + calc(ve[l], ve[r]));
    return f[l][r] = res;
}
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        cin >> n >> x >> y;
        string s, t; cin >> s >> t;
        ve.clear();        
        for (int i = 0; i <= n; i ++)
            for (int j = 0; j <= n; j ++)
                f[i][j] = -1;
        for (int i = 0; i < n; i ++)   
            if (s[i] != t[i]) ve.push_back(i + 1);
        if (ve.size() & 1) cout << -1 << '\n';
        else {
            if (ve.size() == 0) cout << 0 << '\n';
            else if (ve.size() == 2) cout << calc(ve[0], ve[1]) << '\n';
            else if (y <= x) cout << ve.size() / 2 * y << '\n';
            else cout << dfs(0, ve.size() - 1) << '\n';
            
        }
    }
    return 0;
}

E. Conveyor

题意

​ 给你 x × y x\times y x×y的的矩阵,每个格点的传送带一开始都是向右,第 0 0 0秒 ( 1 , 1 ) (1,1) (1,1) 有一个箱子,之后每一秒都会从 ( 0 , 0 ) (0,0) (0,0) 放置一个箱子,每一秒如果 ( i , j ) (i,j) (i,j)上有箱子话,会将箱子移动到指向的格点,然后向右的会变成指向上,向上的会指向右,给你 q q q 个询问,每次 t , x , y t,x,y t,x,y,问你第 t t t秒的时候 ( x , y ) (x,y) (x,y)上是否右箱子。

思路

  • 思维,前缀和优化

​ 想知道第 t t t秒的时候 ( x , y ) (x,y) (x,y)是否有箱子不好判断,但是我们可以求 ( i , j ) (i,j) (i,j) 在 t t t 秒内有多少个箱子经过假设为 c n t i , j cnt_{i,j} cnti,j​,假设我们求出了 c n t i , j cnt_{i,j} cnti,j​了,那么他会有一半向右边走,一半向下走,由于先向右,再向下,因此 c n t i , j + 1 + = c n t i , j + 1 2 cnt_{i,j+1}+=\frac{cnt_{i,j}+1}{2} cnti,j+1​+=2cnti,j​+1​, c n t i + 1 , j + = c n t i , j 2 cnt_{i+1,j}+=\frac{cnt_{i,j}}{2} cnti+1,j​+=2cnti,j​​,由于从 ( 1 , 1 ) → ( x , y ) (1,1)\to(x,y) (1,1)→(x,y)需要 x + y − 1 x+y-1 x+y−1秒,因此只有 t − ( x + y − 1 ) t-(x+y-1) t−(x+y−1)个箱子可能到第 ( x , y ) (x,y) (x,y)这个点,所以我们模拟一下 t t t 秒经过了多少个,减去 t − 1 t-1 t−1秒经过了多少个,减一下就知道第 t t t秒是否有箱子停在这里了。

Code

#include <bits/stdc++.h>
#define x first
#define y second
#define debug(x) cout<<#x<<":"<<x<<endl;
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8, pi = acos(-1), inf = 1e20;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
LL a[150][150];
int g(LL t, int x, int y) {
    memset(a, 0, sizeof a);
    a[0][0] = max(t - (x + y) + 1, 0ll);
    for (int i = 0; i <= x; i ++)
        for  (int j = 0; j <= y; j ++) {
            a[i + 1][j] += a[i][j] / 2;
            a[i][j + 1] += a[i][j] - a[i][j] / 2;
        }
    return a[x][y];
}
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int T;
    cin >> T;
    while (T -- ) {
        LL t; cin >> t >> n >> m;
        cout << (g(t, n, m) - g(t - 1, n, m) > 0 ? "YES" : "NO") << '\n';
    }
    return 0;
}
倍福PLC--PERSISTENT断电保持数据和BOOT中各文件对应的解析 将D:\TC3程序\TwinCAT Project146\TwinCAT RT(x86)\Plc 文件夹的中三个替换文件复制到:G:\TwinCAT\3.1\Boot\Plc完成替换,如下图。(2) 找到程序所存的路径,编程电脑的D:\TC3程序\TwinCAT Project146路径下,并选择对应系统平台TwinCAT RT(x86)(3) 控制器断电,拔出内存卡,使用读卡器,在编程电脑中打开:(本次测试读卡器为G盘)(5) 开机完成后,TwinCAT自动运行,当前闪灯频率为50ms。 阅读详情

相关推荐

Codeforces Round #821 (Div. 2)(A~E)

Codeforces Round #821 (Div. 2)(A~E)

m0_62289613的博客 920

Ecg信号QRS波峰检测:A Real-Time QRS Detection Algorithm (Pan-Tompkins法)

Pan-Tompkins法是R峰检测的经典方法,被引量高达6000+次。 Pan J, Tompkins W J. A real-time QRS detection algorithm[J]. IEEE transactions on biomedical engineering, 1985 (3): 230-236. 本文对论文流程进行了总结,并参考BioSigKit项目,复现了论文代码。 流程图: 代码如下: 第一部分是信号读入,这里使用MIT_BIH信号的100,读入10000个数据点 第二部分

weixin_42870380的博客 1万+

Codeforces Round #821 (Div. 2)——A、B、C、D1

Codeforces Round #821 (Div. 2)——A、B、C、D1

Mango. 335

从平衡车到寻迹小车:IMU963RA九轴陀螺仪实战避坑与四元数融合指南

本文详细解析了IMU963RA九轴陀螺仪在机器人姿态控制中的应用,重点探讨了从六轴升级到九轴系统的技术路径及四元数融合算法。通过实战案例,揭示了如何利用地磁计补偿陀螺积分漂移,并提供硬件集成、传感器校准及算法实现的完整解决方案,有效将8小时漂移控制在2度以内。

weixin_27219587的博客 253

Vmware Vcenter7.0证书web续期发生错误

生成证书,选择第三个(PS,如果没有域名的,一定要写IP,不然很容易卡在85%,服务不能起来)这里大概率可能是证书里面的FQDN和主机不匹配,又或者是主机解析FQDN有问题。vCenter _MACHINE_CERT快到期了,通过web界面更新证书失败。vSphere Client 版本 7.0.2.00200。登陆ssh到vcenter,重新生成证书。先关掉HA,不然证书管理会报错。第一步先这样,重新续订一下证书。

m0_74823595的博客 3944

D2 - Zero-One (Hard Version)(线性dp)

D2. Zero-One (Hard Version)

weixin_53037379的博客 445

Jenkins自动化部署服务到Kubernetes环境

通过Jenkins实现自动化部署可以大大提高软件交付的效率和质量。本文介绍的部署流程涵盖了从代码编译、Maven依赖管理、Docker镜像构建到Kubernetes部署的完整流程,并提供了通知机制以便及时了解部署状态。特别需要注意的是Maven与私服的配置,这是确保构建过程能够正常访问依赖包的关键。通过Jenkins的凭据管理功能,可以安全地管理私服的认证信息,避免敏感信息泄露。在实际应用中,您可能需要根据具体的项目需求和环境特点调整部署脚本。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 528

CF821 B. Rule of League

多加思考,把情况考虑清楚后依次进行模拟输出结果即可。

m0_63353853的博客 457

DCDC电路断电时放电波形发生震荡和电压跳变问题,如何解决?

DCDC电路断电时放电波形发生震荡和电压跳变问题: 做的一个项目需要用单片机ADC采集电压,要让单片机感应到电压降到3.1V开始往FLASH里存数据,单片机2.4V基本上就工作不了,(根据单片机手册的,擦写的时间在40mS在左右)所以3.1V降到2.4V的时间必须要大于40mS岁以上,在单片机VCC处加了一个100nF的电容,理论仿真下来150mS左右发现存不进去,用示波器抓了一下波形,发现放电时震荡很严重,实际3.1V到2.4V时间只有10ms左右,这个肯定存不进去; 请教师傅说是应该时前级DCDC开关电

**My Coding Family** 1967

【蓝牙协议栈】【BLE】详解蓝牙BLE连接建立过程

advertiser。发出广播的设备observer或者scanner。可以扫描广播的设备initiator。能发起连接的设备master或者central。连接成功后的主设备,即主动发起packet的设备slave或者peripheral。连接成功后的从设备,即被动回传packet的设备图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。

风云说通信 2521

Codeforces Round #821 (Div. 2) 补题题解 (A、B、C、D1、D2)

思维题,首先排除不合法方案,在x和y都不是0的情况下,一定是不合理方案,所以在合理方案的情况下,遍历i,保证每个数输出的次数不大于x/y就行。简单思维,找到下标mod k的范围内最大的一组数即可。没有打比赛,纯赛后刷题。

qiaodxs的博客 265

网络分析工具Wireshark系列专栏:01-专栏导读

随着人工智能技术的普及,越来越多的博主开始利用AI进行内容创作,导致优快云等平台上充斥着大量低质量的洗稿文章,严重影响了技术软文的质量和可信度。为了应对这一现象,提升技术内容的质量,瑞哥决定推出系列技术专栏,为大家带来系统、深入且高质量的技术学习资源。这些专栏将帮助读者从入门到精通,特别适合习惯通过文档学习的技术爱好者。作为首个专栏,我们将聚焦于Wireshark——一款广受欢迎的网络协议分析工具。根据优快云后台的反馈,许多读者表示Wireshark是他们欠缺的一项技能。因此,本专栏将通过精心设计的课程

网络技术联盟站 359

Codeforces Round #821 (Div. 2) D2

Codeforces Round #821(Div 2) D2

m0_50269977的博客 296

jre9下载 jdk9

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

CodeForces Round #821 (div.2) A~C

A. Consecutive Sum 题意: 给定一个长度为 n 的数组,每次操作选择索引 i 和 j ,满足 i % k == j % k ,并交换 a[i] 和 a[j] ,最多不超过 k 次操作。 操作完后,选择 k 个连续的元素,使得其和最大,输出最大值。 思路: i % k == j % k 翻译过来就是表示 元素 a[i] 与 a[j] 的距离为 k 。 所以,可以选定前 k 个数,然后以 k 的距离单位去依次遍历数组,选出每个对应位置上的最大元素,相加即为最大值。

Tom的博客 470

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Codeforces Round #420 (Div. 2)】Codeforces 821ABCDE

一句话题解。

YHaX的博客 475

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Codeforces Round #821 (Div. 2)D2

怎么处理这种问题呢?不难发现:一个位,如果被置反两次以上,是很亏的,因为这是没有意义的(会变成以前已经有过的状态,但是两次在本题中是可以的,因为必须这样来减少代价),若另使用相邻位置反称为操作1,直接置反称为操作2,显然,根据每位不能置反超过两次。我们不可能跨过一位使用操作1。思路:因为没保证X一定大于Y,所以现在多了一种操作:我们发现,对于一段连续区间,从左到右不断的置反相邻的位,则最后也能得到只置反区间左右端点的效果,不妨另len=r-l,若x*len

black_blue_lja的博客 378

Codeforces Round #821(Div.2)题解

总结:这次C题考场上还是思路卡住了,但毕竟这是参加的第二场,坚持补题的好习惯相信自己会有所进步!

marble567的博客 615

Codeforces Round #821 (Div. 2)ABC题解

Codeforces Round #821 (Div. 2)

m0_62233297的博客 450

Codeforces Round #420 (Div. 2) 821E. Okabe and El Psy Kongroo

题目链接: http://codeforces.com/contest/821/problem/E 题意: 一个人要从(0,0)到(k,0),并且只能往右或右上或右下走,问有多少种走法。这个平面上有n条平行于x轴的线段,设第i条线段的左起点为LX[i],右起点为RX[i],纵坐标为Y[i],并且RX[i]=LX[i+1],就是n条线段在X轴上的投影是连续的。当这个人在(x,y)点上且

t51645的博客 654

CodeForces Round #821 div.2 A-D题解

CodeForces Round #821 div.2 A-D题解 A.Consecutive Sum B.Rule of League C.Parity Shuffle Sorting D1. Zero-One (Easy Version)

m0_55733023的博客 347

Codeforces Round #821 (Div. 2) A-D2

Codeforces Round #821 (Div. 2)

过路人丶的博客 185

Codeforces Round #821 (Div. 2) A ~ D2

Codeforces Round #821 (Div. 2)

m0_63296665的博客 762

Codeforces Round #821 (Div. 2) D2、E

Codeforces Round #821 (Div. 2)

eyuhaobanga的博客 127
上一篇: Codeforces Round #751 (Div. 2)
下一篇: New Year Garland
枉玊
博客等级 码龄6年 73粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值