CodeForces Round 925 Div.3 A-F 题解

文章目录

  • A
    • 题目
    • AC Code:
  • B
    • 题目
    • AC Code:
  • C
    • 题目
    • AC Code:
  • D
    • 题目
    • AC Code:
  • E
    • 题目
    • AC Code:
  • F
    • 题目
    • AC Code:

A

题目

此题尽量让后面的更大,前面的更小。

我们尽量让第 3 3 3 位更大,如果 3 3 3 位取到 z还有 2 2 2 及以上时,就往第 2 2 2 位取,第二位取满后,就取第 1 1 1 位。分情况讨论,很容易写出代码。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int q, t;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> q;while (q --) {cin >> t;if (t < 28) {cout << "aa" << char(t - 2 + 'a' - 1);cout << '\n';}else if (t < 53){cout << "a";t -= 27;cout << char(t + 'a' - 1) << 'z';cout << '\n';}else {t -= 52;cout << char(t + 'a' - 1) << "zz";cout << '\n';}}return 0;
}

B

题目

我们用一个变量记录能给后面倒的水的单位数。我们从左往右遍历:

  • 如果当前遍历到的水量大于平均水量,就把多的添加到变量里。
  • 如果当前便利的水量小于平均水量,且变量里面单位数能够把当前遍历到的水量添加到平均值,就添加,变量值减小当前水量差平均值的部分。否则,就表明无解,退出。

如果遍历完都没有退出,就表明有解,输出答案,走人。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int t;
int n, a[200100];
long long sum;
void Main() {cin >> n;sum = 0;for (int i = 1; i <= n; i ++) {cin >> a[i];sum += a[i];}sum /= n;long long sum1 = 0;for (int i = 1; i <= n; i ++) {if (a[i] > sum) {sum1 += a[i] - sum;}else {if (sum1 >= (sum - a[i])) {sum1 -= (sum - a[i]);}else {cout << "NO" << '\n';return ;}}}cout << "YES" << '\n';
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t --) {Main();}return 0;
}

C

题目

我们选择每一种填充颜色,因为要覆盖整个序列,所以只有前缀和后缀才关系到我们的代价,对于当前数,一直找,知道找到数组前缀和后缀里的所有元素都和当前数相等,剩下的就是我们要覆盖的。对于每一个找过的元素,记录下来,不再讨论。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int q, n, a[200100];
bool vis[200100];int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> q;while (q --) {cin >> n;vector<int> v; map<int, int> m;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= n; i ++) {v.push_back(a[i]);}v.erase(unique(v.begin(), v.end()), v.end());sort(v.begin(), v.end());for (int i = 0; i < (int)v.size(); i ++) {m[v[i]] = i;}for (int i = 1; i <= n; i ++) {a[i] = m[a[i]];}int ans = 0x3f3f3f3f;memset(vis, 0, sizeof(vis));for (int i = 1; i <= n; i ++) {if (!vis[a[i]]) {vis[a[i]] = 1;int l = 1, r = n;while (a[l] == a[i] && l <= n) l++;while (a[r] == a[i] && r >= l) r--;ans = min(ans, r - l + 1);}}cout << ans << '\n';}return 0;
}

D

题目

我们发现,对于每两个数 a a a b b b,如果这两个数符合题目要求,就表明:
a a a 除以 y y y 的余数等于 b b b 除以 y y y 的余数, a a a 除以 x x x 的余数加上 b b b 除以 x x x 的余数要么为 0 0 0,要么为 x x x

有了这个结论,就可以开始编码。我们可以将数按除以 y y y 的余数排序,这样保证除以 y y y 的余数相等的数都挨在一起。再找到每一个连续的除以 y y y 相等的区间,对于每一个除以 x x x 的余数为 p p p 的数,让答案加上数列里除以 x x x 余数为 x − p x - p xp 的数的个数,如果 p = x − p p=x-p p=xp,说明加上了自己,要减去 1 1 1,此外,如果 p = 0 p=0 p=0,我们就要找除以 x x x 余数为 0 0 0 的个数,同样要减去一。

注意:要开长整型,注意边界问题。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int t, n, x, y;
struct node{int a, mod_x, mod_y;
};
node a[200100];
bool cmp(node a, node b) {return a.mod_y < b.mod_y;
}
long long ans;
map<int, int> cnt;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t --) {ans = 0;cin >> n >> x >> y;for (int i = 1; i <= n; i ++) cin >> a[i].a;for (int i = 1; i <= n; i ++) {a[i].mod_x = a[i].a % x;a[i].mod_y = a[i].a % y;}sort(a + 1, a + n + 1, cmp);int i = 1;while (i <= n) {int l = i, r = i;while (a[l].mod_y == a[r].mod_y && r <= n) r++;r--;if (l == r) {i = r + 1;continue;}for (int j = l; j <= r; j++) {cnt[a[j].mod_x]++;}for (int j = l; j <= r; j++) {if (a[j].mod_x == 0) {ans += cnt[0];ans--;}else {ans += cnt[x - a[j].mod_x];if (a[j].mod_x * 2 == x) ans--;}}i = r + 1;cnt.clear();}ans /= 2;cout << ans << '\n';}return 0;
}

E

题目

我们发现,对于每一个末尾有 p p p 0 0 0 的数,翻转会让这个数少 p p p 位,对于安娜,翻转一个数会让最终的数长度减少这个数后缀 0 0 0 的个数,而对于萨沙,合并一个数会让这个数后缀 0 0 0 无法消除。

所以安娜尽量选择后缀 0 0 0 更多的翻转,萨沙尽量选择后缀 0 0 0 更多的数消除。统计每个数后缀 0 0 0 的个数,然后从大到小排序,因为安娜是先手,所以她会翻转第 1 1 1 大,第 3 3 3 大,第 5 5 5 大,最后统计答案位数,判断输出,完结撒花。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int t;
int n, m;
struct node{string a; int cnt;
};
node a[200100];
bool cmp(node a, node b) {return a.cnt > b.cnt;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t --) {cin >> n >> m;int sum = 0;for (int i = 1; i <= n; i ++) cin >> a[i].a;for (int i = 1; i <= n; i ++) {for (int j = a[i].a.size() - 1; j >= 0; j --) {if (a[i].a[j] != '0') {a[i].cnt = a[i].a.size() - j - 1;break;}}sum += a[i].a.size();}sort(a + 1, a + n + 1, cmp);for (int i = 1; i <= n; i += 2) {sum -= a[i].cnt;}
//		for (int i = 1; i <= n; i ++) {
//			cout << a[i].cnt << ' ';
//		}
//		cout << '\n';if (sum > m) {cout << "Sasha";}else {cout << "Anna";}cout << '\n';}return 0;
}

F

题目

我们发现,对于每一张截图,除开第一个数字,如果 a a a b b b 靠前,说明序列中 a a a b b b 靠前。如有一张截图中 a a a b b b 靠前,另一张截图中 b b b a a a 靠前(均除开第一个数字),说明无解。暴力枚举 a a a b b b 是不行的。我们发现这个关系可以看做一张图中的边,而每一个数字就是一个点。如果这张图中有环,说明无解。

对于每一张截图,除开第一个数字,对于每一个剩下的数字,我们往后面的一个数字建一条有向边,不需要建多条,因为其他的关系可以通过这些边推导出来。然后在这张图上判断一遍是否有环即可。可以用 DFS 或拓补排序判断。我推荐拓补,稳定的 O ( n ) O(n) O(n)

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
struct edge{int u, v, nxt;
};
edge ed[400100];
int edcnt, head[200100];
void addedge(int u, int v){edcnt++;ed[edcnt].u = u;ed[edcnt].v = v;ed[edcnt].nxt = head[u];head[u] = edcnt;
}
int t;
int n, k;
int a[200100];
int deg[200100];
queue<int> q;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while (t --) {edcnt = 0;memset(head, 0, sizeof(head));memset(deg, 0, sizeof(deg));cin >> n >> k;for (int i = 1; i <= k; i ++) {for (int j = 1; j <= n; j ++) {cin >> a[j];}for (int j = 2; j < n; j ++) {addedge(a[j], a[j + 1]);deg[a[j + 1]]++;}}for (int i = 1; i <= n; i ++) {if (!deg[i]) {q.push(i);}}int cnt = 0;while (q.size()) {int now = q.front();q.pop();cnt++;for (int i = head[now]; i; i = ed[i].nxt) {int v = ed[i].v;deg[v]--;if (!deg[v]) {q.push(v);}}}if (cnt == n) {cout << "YES\n";}else {cout << "NO\n";}}return 0;
}

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

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

相关文章

AI定胜负?微软云Azure规模“快速赶上”亚马逊云AWS

AI技术搅动云计算格局。 据媒体报道&#xff0c;有分析数据表示&#xff0c;微软Azure云业务规模已经达到亚马逊AWS云业务规模的四分之三&#xff0c;而在五年前&#xff0c;Azure规模仅为AWS的一半。 得益于人工智能热潮和与Open AI的合作&#xff0c;微软Azure云业务最新财…

冒泡排序平均需要跑多少趟:拉马努金Q函数初探

摘要: 拉马努金Q函数在算法分析中的应用&#xff0c;初步体验 【对算法&#xff0c;数学&#xff0c;计算机感兴趣的同学&#xff0c;欢迎关注我哈&#xff0c;阅读更多原创文章】 我的网站&#xff1a;潮汐朝夕的生活实验室 我的公众号&#xff1a;算法题刷刷 我的知乎&#x…

100条经典C语言题第一天(1-10)

准备复习一下C语言&#xff0c;刷一些和面试相关的问题。 请填写 bool, float, 指针变量 与 “零值”比较的if语句 A.Bool flag 与 “零值”比较的if语句 1为true 0为false 分析 这里的flag 是布尔类型的变量 标准…

YOLOv5改进 | 一文汇总:如何在网络结构中添加注意力机制、C3、卷积、Neck、SPPF、检测头

一、本文介绍 本篇文章的内容是在大家得到一个改进版本的C3一个新的注意力机制、或者一个新的卷积模块、或者是检测头的时候如何替换我们YOLOv5模型中的原有的模块,从而用你的模块去进行训练模型或者检测。因为最近开了一个专栏里面涉及到挺多改进的地方,不能每篇文章都去讲…

linux内核原理--用户态线性地址空间,mmap,malloc,缺页异常

1.概述 前面我们介绍了内核态线性地址空间划分&#xff0c;及在内核态运行时&#xff0c;如何利用伙伴系统完成连续可用物理页框申请和释放。如何利用小块内存分配器实现高效的动态内存分配和释放。如何利用vmalloc&#xff0c;vfree完成线性地址连续但物理地址不连续的多个页框…

什么是 Flet?

什么是 Flet&#xff1f; Flet 是一个框架&#xff0c;允许使用您喜欢的语言构建交互式多用户 Web、桌面和移动应用程序&#xff0c;而无需前端开发经验。 您可以使用基于 Google 的 Flutter 的 Flet 控件为程序构建 UI。Flet 不只是“包装”Flutter 小部件&#xff0c;而是…

Socket.D 开源输传协议的集群转发特性

1、简介 Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议。底层可以依赖 TCP、UDP、KCP、WebSocket 等传输层协议。其开发背后的动机是用开销更少的协议取代超文本传输协议(HTTP)&#xff0c;HTTP 协议对于许多任务(如微服务通信)来说效…

paddlepaddle 2.6版本在WSL2环境中如何使用NVIDIA显卡运行神经网络

paddlepaddle 2.6版本发布后&#xff0c;官网上可以使用NVIDIA cuda 12.x进行机器学习了&#xff0c;训练神经网络的效率大为提升。因为是在wsl2环境中安装&#xff0c;不是纯正的linux环境&#xff0c;其中一些小问题需要注意。 使用conda 安装飞浆&#xff0c;wsl2中安装了c…

上位机图像处理和嵌入式模块部署(上位机主要功能)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前关于机器视觉方面&#xff0c;相关的软件很多。比如说商业化的halcon、vision pro、vision master&#xff0c;当然也可以用opencv、pytorch自…

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…

ArrayList 与 LinkedList 区别

serialVersionUID 有什么作用&#xff1f; serialVersionUID 是 Java 序列化机制中的一个重要概念&#xff0c;它用于确保反序列化对象与序列化对象保持兼容。当一个类实现 java.io.Serializable 接口时&#xff0c;可以通过定义一个名为 serialVersionUID 的静态常量来指定该…

[缓存] - 2.分布式缓存重磅中间件 Redis

1. 高性能 尽量使用短key 不要存过大的数据 避免使用keys *&#xff1a;使用SCAN,来代替 在存到Redis之前压缩数据 设置 key 有效期 选择回收策略(maxmemory-policy) 减少不必要的连接 限制redis的内存大小&#xff08;防止swap&#xff0c;OOM&#xff09; slowLog …

Swift Combine 网络受限时从备用 URL 请求数据 从入门到精通十四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

数据结构.图的存储

一、邻接矩阵法 二、邻列表法 三、十字链表法

python Flask与微信小程序 统计管理

common/models/stat/StatDailyMember.py DROP TABLE IF EXISTS stat_daily_member;CREATE TABLE stat_daily_member (id int(11) unsigned NOT NULL AUTO_INCREMENT,date date NOT NULL COMMENT 日期,member_id int(11) NOT NULL DEFAULT 0 COMMENT 会员id,total_shared_count …

例39:使用List控件

建立一个EXE工程&#xff0c;在窗体上放一个文本框&#xff0c;一个列表框和三个按钮输入如下的代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)List1.AddItem(Text1.Text)End SubSub Form1_Command2_BN_Clicked(hWndForm As hWnd, h…

【python之美】减少人工成本之批量拿取文件名保存_4

获取文件名保存 准备工作: 上代码: import ospath "C:\\Users\\Administrator\\Desktop\\text\\" file_names os.listdir(path) print(file_names)i 1 for file_name in file_names:name file_name.split(_)[0]print(name)new_name name "_修改后第&qu…

【zabbix】(四)-钉钉告警企业微信配置

前提条件&#xff1a; 已经安装了Python3环境&#xff08;脚本需要requests模块&#xff09;。Centos7.x自带Python2&#xff08;不含requests模块&#xff09; 钉钉告警配置 一 安装Python3 参考该优秀文档部署 查看Python的模块&#xff1a;pip list / pip3 list 报错 …

一周学会Django5 Python Web开发-项目配置settings.py文件-基本配置

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计17条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…