Codeforces Round 1042 (CF2131) 补题笔记(A-E)

news/2025/10/8 17:28:45/文章来源:https://www.cnblogs.com/Tiger-Rory/p/19049237

A. Lever

预计难度:红。

考察:语法。

对于所有满足 \(a_i>b_i\) 的下标 \(i\),累计 \(a_i-b_i\) 再加上 \(1\) 就是结果。因为忽略操作 \(1\) 时还迭代了一次所以要加 \(1\)

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std; 
const int N = 12;  
int t, n, a[N], b[N]; 
void Solve() {cin >> n; for(int i = 1; i <= n; i++) {cin >> a[i]; } for(int i = 1; i <= n; i++) {cin >> b[i]; } int ans = 0; for(int i = 1; i <= n; i++) {if(a[i] > b[i]) ans += a[i] - b[i]; }cout << ans + 1 << '\n'; return; 
} 
int main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t--) Solve(); return 0;
}

B. Alternating Series

预计难度:橙。

考察:贪心、构造。

手玩样例发现奇数位得是负数,偶数位得是正数才行,否则不优。然后找规律发现如果偶数位除非是最后都填 \(3\),最后的话填 \(2\),奇数位全填 \(-1\) 即可。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std; 
const int N = 12;  
int t, n, a[N], b[N]; 
void Solve() {cin >> n; if(n % 2 == 0) {for(int i = 1; i <= n - 1; i++) {if(i & 1) cout << -1 << ' '; else cout << 3 << ' '; }cout << 2 << '\n'; }else {for(int i = 1; i <= n; i++) {if(i & 1) cout << -1 << ' '; else cout << 3 << ' '; }cout << '\n'; 		}return; 
} 
int main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t--) Solve(); return 0;
}

C. Make it Equal

预计难度:橙。

考察:数学-同余。

容易发现,如果一个数 \(y\) 能由 \(x\) 通过操作得到,那么令 \(a=x \bmod k\)\(b=k-a\),则 \(y\) 一定能表示成 \(a+xm\)\(b+xm\) 的形式(\(m\) 为非负整数),即必须满足条件 \(y \equiv a\pmod x\)\(y \equiv b\pmod x\)。那么,我们只要储存集合 \(S\) 中的每个数对应的 \(a,b\),然后判断 \(T\) 中的每个数能否用这有限个 \(a,b\) 全部得到即可。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std; 
const int N = 2e5 + 5;  
int t, n, k, a[N], b[N]; 
map<int, int> mp; 
void Solve() {cin >> n >> k; for(int i = 1; i <= n; i++) {cin >> a[i]; } for(int i = 1; i <= n; i++) {cin >> b[i]; } for(int i = 1; i <= n; i++) {int c = a[i] % k;  mp[c]++;mp[(k - c) % k]++; }bool ok = 0; for(int i = 1; i <= n; i++) {int c = b[i] % k; if(!mp[c]) {ok = 1; break; }mp[c]--, mp[(k - c) % k]--; }for(int i = 1; i <= n; i++) {int c = a[i] % k;  mp[c] = 0; mp[(k - c) % k] = 0; }if(!ok) cout << "YES\n"; else cout << "NO\n";  return; 
} 
int main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t--) Solve(); return 0;
}

D. Arboris Contractio

预计难度:黄。

考察:贪心、树的直径。

容易发现,当点数大于 \(2\) 时,树操作后能得到的最小直径必然为 \(2\),我们需要思考怎么把它的直径快速变成 \(2\)

容易发现选取某一个点为起点后,不仅到终点的路径上的点无需再操作一次,其他与其相邻的点也不需要再操作了。那我们每次操作贪心地选取当前拥有深度大于 \(1\)叶节点最多的节点就能保证操作次数最少了。下面是示意图。

如图,先选 \(1\) 为起点,再选 \(5\),最后选 \(9\) 即可。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5 + 5; 
int t, n; 
vector<int> g[N]; 
void solve(){cin >> n; for (int i = 1; i <= n; i++) g[i].clear(); for (int i = 1, u, v; i < n; i++) {cin >> u >> v; g[u].push_back(v); g[v].push_back(u);  }int ans = 0, maxx = 0;for (int i = 1; i <= n; i++) {if((int)g[i].size() > 1) {int tmp = 0; for(int v : g[i]) {tmp += ((int)g[v].size() == 1);   } maxx = max(tmp, maxx);  ans += tmp;  }} cout << ans - maxx << endl; return; 
}
int main(){cin >> t; while(t--) solve(); return 0;
}

E. Adjacent XOR

预计难度:黄。

考察:位运算、贪心。

题意简述

给你一个长度为 \(n\) 的数组 \(a\),对于每个 \(1 \le i< n\),最多可以执行一次下面的操作:

  • \(a_i = a_i \oplus a_{i+1}\)

给定另一个长度为 \(n\) 的数组 \(b\),判断是否可以将 \(a\) 转换为 \(b\)

解题报告

除去 \(i=n\) 的情况,如果 \(a_i\) 可以变成 \(b_i\),那么可以是 \(a_{i+1}\) 在修改之前被其用来修改,也可以是 \(a_{i+1}\) 修改成 \(b_{i+1}\) 之后被 \(a_i\) 用来修改,还有一种情况是本来就 \(a_i=b_i\)。判断通过这两个操作之一能否变成 \(b_i\) 就好。

点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std; 
const int N = 2e5 + 5;  
int t, n; 
int a[N], b[N], c[N], d[N];  void Solve() {cin >> n; for(int i = 1; i <= n; i++) {cin >> a[i]; } for(int i = 1; i <= n; i++) {cin >> b[i]; } if(a[n] != b[n]) {cout << "NO\n"; return; } for(int i = 1; i <= n - 1; i++) {int c1 = (a[i] ^ a[i + 1]), c2 = (a[i] ^ b[i + 1]);if(c1 == b[i] || c2 == b[i] || a[i] == b[i]) continue; else {cout << "NO\n";  return; }}cout << "YES\n"; return; 
} 
int main(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t--) Solve(); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI编程助手框架需求探索

本文深入分析了一个专注于提升AI编程助手体验的开源项目,探讨其核心功能定位、应用场景和使用方式,并基于大量用户反馈识别出潜在的创新需求方向,为AI编程工具的未来发展提供参考。内容描述 核心功能定位 该项目是一…

表格数据自动机器学习技术解析

本文介绍了AutoGluon Tabular开源库,这是一个面向表格数据的自动机器学习工具。通过该工具,开发者仅需编写少量代码即可利用深度学习技术构建应用程序,涵盖自动机器学习技术在图像、文本和表格数据集上的应用。Auto…

网站开发 工作量公司网站开发步骤

前面博主写了一篇文章去介绍opentsdb的http接口的使用方法,但是某一些接口的使用还是比较复杂&#xff0c;这篇文章会通过example来详细讲述opentsdb的一些特性。 本文的举的例子有这些&#xff1a; 基本的写入和查询数据的注释和说明子查询查询中的filters使用查询数据的rat…

外链提高网站权重沈阳男科私立医院

普源示波器是一种常用的电子测试设备&#xff0c;它可以测量电路中的电压和电流波形。其中&#xff0c;测量相位差是示波器的一个重要功能&#xff0c;它可以用于分析信号的时间延迟、相位差、频率响应等信息。本文将介绍普源示波器测量相位差的原理和方法&#xff0c;并通过实…

广州定制网站建设毕业设计做网站 答辩会问什么问题

1、添加记录(INSERT)使用SQL语句的INSERT命令可以向数据库中插入记录&#xff0c;INSERT命令的基本形式为&#xff1a;INSERT INTO 表名 [(字段名1,字段名2…)] VALUES (值1,值2,…)若在输入记录时&#xff0c;每个字段均有内容&#xff0c;可省略表名后的字段名。该SQL语句用于…

10/8

Java方法与递归学习实践总结 在Java方法章节的学习中,我最大的收获并非仅仅掌握了语法规则,而是体会到“结构化编程”背后的思维逻辑——用“方法”将复杂问题拆解、复用,用巧劲替代重复的蛮力,这与课件中“懒人造…

2025.10.8

file:///C:/Users/lenovo/Desktop/Java%20%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80%E5%AE%9E%E9%AA%8C%E6%96%87%E6%A1%A310.8.docx

【QT】QString 与QString区别 - 教程

【QT】QString& 与QString区别 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

[Python/地图] 基于Python绘制地图

0 概述:基于Python绘制地图 1 基于 PyEcharts 绘制地图 PyEchart库pyecharts 是一个基于 百度开源的 Apache ECharts 的 Python 数据可视化库。ECharts 是一个使用 JavaScript 实现的开源可视化库,而 Pyecharts 则是…

常德网站开发哪家好如何制作自媒体短视频

全球领先的企业软件创新者VMware&#xff08;NYSE&#xff1a;VMW&#xff09; 今日在VMworld 2020大会上&#xff0c;宣布升级Tanzu对VMware Cloud on AWS、Azure VMware Solution 和Oracle Cloud VMware Solution的支持&#xff0c;同时与GitLab展开合作。在VMworld 2019美国…

【从前端到后端导入excel资料实现批量导入-笔记模仿芋道源码的《系统管理-用户管理-导入-批量导入》】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

开发网站的基本原则网络购物平台有哪几个

在使用 Kotlin 和 Jetpack Compose 进行 Android 开发时&#xff0c;选择正确的单位来设置视图尺寸、间距和字体大小是非常重要的。这些单位确保应用在各种设备和屏幕尺寸上都能保持良好的布局和可读性。 三种常用的单位 1. Density-independent Pixels (dp) 用途&#xff1…

实验任务1——8

实验1 #include <stdio.h>int main(){ printf(" O\n"); printf("<H>\n"); printf("I I"); return 0;}#include <stdio.h>int main(){ printf(" O\t O\n");…

laya 武器旋转砍怪判断

laya 武器旋转砍怪判断typescript代码:export interface IMonster extends Laya.Node {id: number;isDie:boolean;getPoint(): Laya.Point;getHitRect():Laya.Rectangle; }export class Monster extends Laya.Sprite i…

完整教程:将音频数据累积到缓冲区,达到阈值时触发处理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:Android studio初体验

实用指南:Android studio初体验2025-10-08 17:01 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

一款专门为 WPF 打造的开源 Office 风格用户界面控件库

前言 今天大姚给大家分享一款专门为 WPF 打造的开源(MIT license)、免费的 Office 风格用户界面控件库:Fluent.Ribbon。 项目介绍 Fluent.Ribbon 一个为 Windows Presentation Foundation(WPF)实现类 Office 开源…

一款专门为 WPF 打造的开源 Office 风格用户界面控件库

前言 今天大姚给大家分享一款专门为 WPF 打造的开源(MIT license)、免费的 Office 风格用户界面控件库:Fluent.Ribbon。 项目介绍 Fluent.Ribbon 一个为 Windows Presentation Foundation(WPF)实现类 Office 开源…

部门网站建设内容方案莆田市的网站建设公司

微信小程序页面传值为对象[Object Object]详解 1、先将传递的对象转化为JSON字符串拼接到url上2、在接受对象页面进行转译3、打印结果 1、先将传递的对象转化为JSON字符串拼接到url上 // info为对象 let stationInfo JSON.stringify(info) uni.navigateTo({url: /pages/statio…