Codeforces Round 950 (Div. 3) 题解分享

A. Problem Generator

思路

A:纯纯模拟,不多解释。

code

inline void solve() {int n, m; cin >> n >> m;vector<int> cnt(26);string s; cin >> s;for (char c : s) cnt[c - 'A'] += 1;ll ans = 0;for (int i = 0; i < 7; i ++ ) {ans += max(m - cnt[i], 0);}cout << ans << endl;return;
}

B. Choosing Cubes

思路

Q:怎么还是模拟?

A:我怎么知道。

要解决这个问题,其实只要统计a[f]的数量和大于等于a[f]的数量即可。因为最后是要降序排序的,然后分讨就行。

code

inline void solve() {int n, m, k; cin >> n >> m >> k;vector<int> a(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];int sum = 0, pre = 0;for (int i = 1; i <= n; i ++ ) {if (a[i] >= a[m]) pre += 1;if (a[i] == a[m]) sum += 1;}if (k >= pre) cout << "YES\n";else if (k > pre - sum && k < pre) cout << "MAYBE\n";else cout << "NO\n";return;
}

C. Sofia and the Lost Operations

思路

Q:将数组a变成数组b的最基本条件是什么?

A:给的数组d中要有a变成b没有的元素。对于样例一,d数组至少要有1,2。

Q:那就只要检查这个就行了么?

A:当然不对,数组d上的元素是都要被利用上的,对于样例一,如果再给一个5,a就完全不能变成b了。

Q:那要怎么做?

A:你发现了么,只要是5,1,2或者1,5,2就能实现“覆盖”。也就是说,如果出现了b中没有的元素,只要后面有b中的元素就可以了。

code

inline void solve() {int n; cin >> n;vector<int> a(n + 1), b(n + 1);map<int, int> need;for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) {cin >> b[i];if (a[i] != b[i]) need[b[i]] += 1;else {if (!need.count(b[i])) need[b[i]] = 0;}}bool last = false;int q; cin >> q;for (int i = 1; i <= q; i ++ ) {int x; cin >> x;if (need.count(x)) {if (need[x]) need[x] -= 1;last = false;}else last = true;}if (last) return cout << "NO\n", void();for (auto [t, c] : need) {if (c != 0) return cout << "NO\n", void();}cout << "YES\n";return;
}

D. GCD-sequence

思路

Q:怎么又又是模拟?

A:首先拿出gcd数组,我们可以得到的是b[i + 1] < b[i]的数量,然后模拟删除,观察这个数量是否会变成0即可。

code

inline void solve() {int n; cin >> n;vector<int> a(n + 1), b(n);for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i < n; i ++ ) b[i] = gcd(a[i], a[i + 1]);int cnt = 0;for (int i = 2; i < n; i ++ ) cnt += (b[i] < b[i - 1]);bool ok = false;if (cnt - (b[2] < b[1]) == 0 || cnt - (b[n - 1] < b[n - 2]) == 0) ok = true;for (int i = 2; i < n; i ++ ) {int tmp = cnt, cur = gcd(a[i - 1], a[i + 1]);tmp -= (b[i] < b[i - 1]);if (i - 2 >= 1) {tmp -= (b[i - 1] < b[i - 2]);tmp += (cur < b[i - 2]);}if (i + 1 < n) {tmp -= (b[i + 1] < b[i]);tmp += (cur > b[i + 1]);}if (tmp == 0) ok = true;}if (ok) cout << "YES\n";else cout << "NO\n";return;
}

E. Permutation of Rows and Columns

思路

A:我直接抢着说了,这题就是一眼出的题吧。我们要做的有1.判断两个矩阵“对应行”元素是否一致。2.用数组映射交换列即可。

code

inline void solve() {int n, m; cin >> n >> m;vector<vector<int> > a(n + 1, vector<int>(m + 1)), b(n + 1, vector<int>(m + 1));map<int, int> col, row;for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {cin >> a[i][j];col[a[i][j]] = j, row[a[i][j]] = i;}}bool ok = true;for (int i = 1; i <= n; i ++ ) {int loc = -1;for (int j = 1; j <= m; j ++ ) {cin >> b[i][j];if (loc == -1) loc = row[b[i][j]];else if (row[b[i][j]] != loc) ok = false;}}vector<int> lie(m + 1);for (int i = 1; i <= m; i ++ ) {lie[i] = col[b[1][i]];}for (int i = 2; i <= n; i ++ ) {for (int j = 1; j <= m; j ++ ) {if (b[i][j] != a[row[b[i][j]]][lie[j]]) ok = false;}}if (ok) cout << "YES\n";else cout << "NO\n";return;
}

F1. Field Division (easy version)

思路

Q:怎么给才能使得增加呢?

A:由观察可知,只有满足两种情况才可以,假设我们处于从上往下遍历行中

1.该元素是该行喷泉的最左边

2.该元素是接下来几行的最小(不能有相等)

code

很史

inline void solve() {int n, m, k; cin >> n >> m >> k;vector<array<int, 3>> a(k);map<int, int> row;for (int i = 0; i < k; i ++ ) {cin >> a[i][0] >> a[i][1];if (!row.count(a[i][0])) row[a[i][0]] = a[i][1];else row[a[i][0]] = min(row[a[i][0]], a[i][1]);a[i][2] = i;}map<int, int> l;for (auto [t, c] : row) l[c] += 1;l[1e9] += 1;ll tot = 0;int minv = row.rbegin()->second;for (auto t = row.rbegin(); t != row.rend(); t ++ ) {minv = min(t->second, minv);t->second = minv;}if (row.rbegin()->first < n) {tot += (ll)(n - row.rbegin()->first) * m;}int last = 0;for (auto [r, c] : row) {tot += (ll)(r - last) * (c - 1);last = r;}cout << tot << endl;sort(a.begin(), a.end());set<int> vis;vector<int> ans(k);for (int i = 0; i < k; i ++ ) {if (!vis.count(a[i][0])) {vis.insert(a[i][0]);l[a[i][1]] -= 1;if (l[a[i][1]] == 0) l.erase(a[i][1]);if (l.begin()->first > a[i][1]) ans[a[i][2]] = 1;}}for (int i = 0; i < k; i ++ ) cout << ans[i] << ' ';cout << endl;return;
}

写在最后

剩下题解明天补)

cf用umap卡特色,会退化到O(n),1e7再考虑用这个吧,1e5的完全可以map,还打的快()

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

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

相关文章

Spring (41)Eureka

Eureka是Netflix开发的服务发现框架&#xff0c;后来成为了Spring Cloud Netflix组件之一。它主要用于AWS云环境中管理服务间的注册与发现&#xff0c;但也可以在非AWS环境中工作。Eureka包含两个主要组件&#xff1a;Eureka Server和Eureka Client。 Eureka Server Eureka S…

windows RNDIS开发-概念

远程 NDIS (RNDIS) 是一种独立于总线的类&#xff0c;适用于动态 即插即用 (PnP) 总线&#xff08;例如 USB、1394、蓝牙和 InfiniBand&#xff09;上的以太网 (802.3) 网络设备。 远程 NDIS 通过抽象控制和数据通道在主计算机与远程 NDIS 设备之间定义与总线无关的消息协议。 …

【微信小程序】页面导航

声明式导航 导航到 tabbar 页 tabBar页面指的是被配置为tabBar的页面。 在使用<navigator>组件跳转到指定的tabBar页面时&#xff0c;需要指定url属性和open-type属性&#xff0c;其中&#xff1a; url 表示要跳转的页面的地址&#xff0c;必须以/开头open-type表示跳…

Java 18 新特性

Java 作为一门广泛应用于企业级开发和系统编程的编程语言&#xff0c;一直以来都在不断进化和改进。2022 年发布的 Java 18 版本为开发者带来了一些新的特性和改进&#xff0c;这些特性不仅提升了开发效率&#xff0c;还进一步增强了 Java 语言的功能和灵活性。本文将深入探讨 …

spring boot3登录开发-2(3邮件验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 上文衔接 接口设计与实现 1.接口分析 2.实现思路 3.代码实现 1.定义验证码短信HTML模板枚举类 2.定义验证码业务接口 3. 验证码业务接口实现 4.控制层代码 4.测试 写…

场外个股期权标的有哪些?

今天带你了解场外个股期权标的有哪些&#xff1f;场外个股期权是一种金融衍生品&#xff0c;它不在交易所内进行交割&#xff0c;而是在交易所以外的场所进行交易的股票期权合约。 场外个股期权标的有哪些&#xff1f; 场外个股期权的标的通常包括A股市场上的融资融券标的&…

63、背包问题

背包问题 题目描述 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式&#xff1a;…

spring中那些地方使用了反射

1、依赖注入&#xff08;Dependency Injection&#xff09; Spring Boot通过反射机制将bean注入到相应的属性或构造函数中。当我们在Spring Boot中使用如Autowired这样的注解时&#xff0c;Spring容器会利用反射机制找到相应的bean并注入到对应的属性或构造函数中。 2、Bean的…

ARM服务器在云手机中可以提供哪些支持

ARM服务器作为云手机的底层支撑&#xff0c;在很多社媒APP或者电商APP平台都有着很多看不见的功劳&#xff0c;可以说ARM扮演着至关重要的底层支持角色&#xff1b; 首先&#xff0c;ARM 服务器为云手机提供了强大的计算能力基础。云手机需要处理大量的数据和复杂的运算&#x…

Java Web框架使用经验

在Java Web开发领域&#xff0c;框架的使用极大地提高了开发效率和代码的可维护性。我个人的开发经验中&#xff0c;涉及了多个Java Web框架&#xff0c;其中最为常用和熟悉的包括Spring MVC、Spring Boot以及Struts2。下面我将从技术难点、面试官关注点、回答吸引力以及代码举…

标题:Python中的箭头符号 “->“:一个简单而强大的功能

基本原理 在Python中&#xff0c;箭头符号 “->” 通常出现在函数定义中。这个符号是Python 3.8版本引入的&#xff0c;它用于定义函数时&#xff0c;将参数和返回类型分开&#xff0c;使得函数的接口更加清晰。这种语法被称为类型提示&#xff08;Type Hints&#xff09;&…

微服务第一轮

课程文档 目录 一、业务流程 1、登录 Controller中的接口&#xff1a; Service中的实现impl&#xff1a; Service中的实现impl所继承的接口IService&#xff08;各种方法&#xff09;&#xff1a; VO&#xff1a; DTO&#xff1a; 2、搜索商品 ​Controller中的接口&a…

【亚马逊云科技 CSDN 联合巨献】 「对话AI 构建者:从基础到应用的 LLM 全景培训」 限时免费!

&#x1f680;&#x1f31f;【亚马逊云科技 & CSDN 联合巨献】 &#x1f4da;「对话AI 构建者&#xff1a;从基础到应用的 LLM 全景培训」&#x1f525; 限时免费&#xff01; &#x1f4c6; 抓紧时间&#xff01;6月7日前注册&#xff0c;原价 399&#xff0c;现在仅需 0…

在Web应用中如何处理会话跟踪

在Web应用中&#xff0c;会话跟踪是一个至关重要的功能&#xff0c;它允许服务器在多个请求之间识别并跟踪特定的用户。通过会话跟踪&#xff0c;服务器能够维持用户的状态信息&#xff0c;从而为用户提供个性化服务&#xff0c;比如保存购物车信息、实现登录状态保持等。然而&…

C基础与SDK调试方法

REVIEW 上次学习了一下软件使用流程zynq PS点灯-CSDN博客 本次学习一下C编程基础与调试方法 1. 硬件编程原理 小梅哥视频链接&#xff1a; 07_Xilinx嵌入式裸机硬件编程原理_哔哩哔哩_bilibili 对应的课程笔记&#xff1a;【zynq课程笔记】【裸机】【第7课 】【硬件编程原理…

C++ STL - 容器

C STL&#xff08;标准模板库&#xff09;中的容器是一组通用的、可复用的数据结构&#xff0c;用于存储和管理不同类型的数据。 目录 零. 简介&#xff1a; 一 . vector&#xff08;动态数组&#xff09; 二. list&#xff08;双向链表&#xff09; 三. deque&#xff08…

yolov8摔倒检测(包含数据集+训练好的模型)

基于先进的YOLOv8模型&#xff0c;实现了一套高效可靠的人体摔倒检测系统。YOLOv8作为YOLO系列的最新成员&#xff0c;以其卓越的检测速度和准确性&#xff0c;在计算机视觉领域尤其是目标检测任务中表现出色。本系统不仅能够实时处理视频流或监控画面&#xff0c;还能对静态图…

SwiftUI中Menu和ControlGroup的使用

本篇文章主要介绍一下Menu组件和ControlGroup组件的使用。Menu组件是在iOS 14&#xff08;tvOS 17&#xff09;推出的一个组件&#xff0c;点击后提供一个可选择的操作列表。ControlGroup组件是一个容器视图&#xff0c;以视觉上适当的方式为给定的上下文显示语义相关的控件&am…

【面试干货】SQL语言分类

【面试干货】SQL语言分类 1、数据查询语言&#xff08;DQL&#xff09;2、数据操纵语言&#xff08;DML&#xff09;3、数据定义语言&#xff08;DDL&#xff09;4、数据控制语言&#xff08;DCL&#xff09;5、结语 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

使用gradio库实现Web应用,允许用户上传图像,并使用YOLOv8模型对图像进行目标检测。

一、Gradio Gradio 详细介绍 Gradio 是一个用于构建和分享机器学习模型和数据科学应用的开源Python库。它简化了创建交互式Web界面的过程&#xff0c;让开发者可以快速搭建原型并与他人分享。 主要特性 易用性&#xff1a; 无需前端开发经验&#xff1a;只需几行Python代码就…