CF补题 991-Div

news/2024/12/15 20:33:33/文章来源:https://www.cnblogs.com/dianman/p/18608666

CF补题 991-Div.3-20241210

Dashboard - Codeforces Round 991 (Div. 3) - Codeforces

A:

题目大意:给出 \(n\) 个字符串,求前多少个字符串的大小之和小于 \(m\)

#include <iostream>
#include <string>
using namespace std;string a[52];int main()
{int T;cin >> T;while (T--){int n, m;int flag = 0;cin >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i];//读入所有字符串for (int i = 1; i <= n; i++) {if (m >= a[i].size()) {//如果能当前的m大于当前遍历的字符串的大小flag++;m -= a[i].size();//就把他减去}else break;//否则,退出}cout << flag << endl;//输出前flag个for (int i = 1; i <= n; i++) a[i].clear();//初始化}return 0;
}

签到题数据有点坑,调了很久

B:

题目大意:给定一个序列,每次选择其中一个元素,对他的左右两个元素分别做加减 \(1\) 操作,求能否使序列所有元素都变为相同

#include <string>
using namespace std;int main()
{int T;cin >> T;while (T--){int n,a;int flag = 0;long long oddsum = 0, evesum = 0;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &a);if (i % 2) oddsum += a;else evesum += a;}long long oddcnt = n % 2 == 0 ? n / 2 : n / 2 + 1, evecnt = n / 2;if (oddsum % oddcnt != 0 || evesum % evecnt != 0 || (oddsum / oddcnt)!= (evesum / evecnt))cout<<"NO"<<endl;else cout<<"YES"<<endl;}return 0;
}

属于是不开 long long 见祖宗,题目只给出了 \(sum(n)<2e5\) 没说 \(sum(a)\) 的范围

所以调了很多次,发现需要开 long long 记录元素和

因为我们更改元素的值时,是对相同奇偶位的元素进行更改,所以我们需要保证 奇数位上的数偶数位上的数

他们各自的和都能被 奇数位个数偶数位个数 整除,且还要满足他们各自的平均值相等,才能使序列所有元素都变为相同

C:

题目大意:给出一个数,每次可以对它任意一个位置上的数进行平方操作(得到的数必须小于10),求能否得到能一个被 \(9\) 整除的数

#include <string>
#include <iostream>
#include <vector>
using namespace std;bool check(vector<int> a) {int sum = 0, mem2 = 0, mem3 = 0;for (int i = 0; i < a.size(); i++) {if (a[i] == 2) mem2++;if (a[i] == 3) mem3++;sum += a[i];}if (mem3 >= 2 && sum % 9 == 0) return 1;if (mem2 >= 8) return 1;for (int i = 0; i <= mem2; i++)for (int j = 0; j <= mem3; j++)if ((sum + i * 2 + j * 6) % 9 == 0) return 1;return 0;
}int main()
{int T;cin >> T;while (T--) {string s;vector<int> a;cin >> s;for (int i = 0; i < s.size(); i++)a.push_back(s[i] - '0');if (check(a)) cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}

题目给出的数,它的位数小于 \(10^5\) 即最多有 \(100000\) 位,远远大于 long long 的范围

使用 string 读入数据,把每一位取出来存进 vector

关于一个数能否被 \(9\) 整除,有定理如下:

能被 \(9\) 整除的数,各个数位上的数字和能被 \(9\) 整除,那么这个数能被 \(9\) 整除

所以在 check 函数内取出每个位上的数,进行判断

根据题意,我们只能对 \(1,2,3\) 进行平方操作,而且 \(1\) 的平方仍然为 \(1\) ,只需要记录 \(2,3\) 的数量


由于 \(mod\ 9\) 的余数只有 \(\{1,2,3,4,5,6,7,8\}\) ,存在以下情况:

\(1+2*3=9,\ 2+2*8=18,\ 3+2*2=9,\ 4+2*7=18\)

\(5+2*2=9,\ 6+2*6=18,\ 7+2=9,\ 8+2*5=18\)

每次对 \(2\) 进行平方是,对 sum 的贡献为 +2 ,所以的余数都能由最多 \(8\)\(2\) 所组合成为能被整除的数

故当 \(2\) 的数量大于等于 \(8\) 时,一定有解


由于 \(3\) 的平方对 sum 的贡献为 +3 ,且 \(3\)+3 也会被 \(9\) 整除,所以有:

\(3\) 的数量大于等于 \(2\) 时, 若 sum 已是 \(3\) 的倍数,则一定能凑出解


剩下的情况只有 \(2,3\) 的数量分别小于 \(8,2\) ,直接枚举出所有情况再判断是否有解

D:

题目大意:给出一个数字串,每次可以选择其中非 \(0\) 和最左边的数字,将它减去 \(1\) 和左边的数字交换,求最大序字符串

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int T;
string s;int main()
{cin >> T;while (T--) {cin >> s;for (int i = 0; i < s.size(); i++) {int mmax = i, mempos = 0;for (int j = i; j < min(i + 10, (int)s.size()); j++) {if (s[mmax]-mempos < s[j] - j + i) {mmax = j;mempos = j - i;}}for (int j = mmax; j > i; j--) {s[j]--;swap(s[j], s[j - 1]);}}cout << s << endl;}return 0;
}

贪心的思想,由于我们最多只能把一个数减到 \(0\) ,所以对一个数,枚举它之后的所有能交换的数的枚举次数,最多不超过 \(9\)

数据范围满足时间限制,应该能够过

首先读入这个数字串,从最高位开始,对每一位都向后枚举 min(i + 10, (int)s.size()) ,记录枚举的过程中能让这个数交换后变得最大的 mmax下标,以及离当前数字的距离 mempos

枚举完后,从 mmax下标开始向前枚举,每次执行 -1swap 操作

最后输出 s 得到全局最优解

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

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

相关文章

基于ESP32的桌面小屏幕实战[4]:硬件设计之PCB Layout

1. PCB Layout 步骤生成PCB确定PCB layout规范绘制板框尺寸布局 布局规范:按电气性能合理分区,一般分为:数字电路区(即怕干扰、又产生干扰)、模拟电路区(怕干扰)、功率驱动区(干扰源); 完成同一功能的电路,应尽量靠近放置,并调整各元器件以保证连线最为简洁; 对于质…

【C#脚本】C#调用Python脚本的方式(一),以PaddleOCR-GUI为例

以下文章来源于mingupup的学习记录 ,作者DotNet学习交流 前言 每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一…

Derby 数据库介绍(1)--简介

Apache Derby 是 Apache DB 的一个子项目,是一个完全用 Java 实现的开源关系数据库,采用 Apache License 2.0 许可;本文主要介绍其基本概念及安装。 1、Derby 特点 Derby 体积小——基础引擎和嵌入式 JDBC 驱动程序约 3.5MB。Derby 基于 Java、JDBC 和 SQL 标准。Derby 提供…

参数占位符 #{xx} 和 ${xx} 的区别

#{xx} :带有#{}的SQL会采用SQL预编译技术,预编译后的SQL中 #{} 被替换为 “?”,这里的 “?”叫变量占位符,在实际执行SQL时会用“xx”的实际值替换变量占位符,效率更高,可以防止SQL注入SQL预编译:MySQL执行SQL有几个步骤,“查缓存->[语法分析->优化->编译-&…

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别

三文带你轻松上手鸿蒙的 AI 语音 01-实时语音识别 前言 HarmonyOSNext中集成了强大的 AI 功能。Core Speech Kit(基础语音服务)是它提供的众多 AI 功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础 AI 能力,包括文本转语音(TextToSpeech)及语音识别(Spee…

【原创】ARM64 实时linux操作系xenomai4(EVL)构建安装简述

本文简要记录在瑞芯微RK3588(ARM64)构建安装实时linux操作系统xenomai4的过程,以及实时性测试,希望对你有所帮助!目录0 环境说明1 内核构建2 库编译方式1 交叉编译方式2 本地编译3 测试单元测试hectic:EVL 上下文切换latmus:latency测试4 RK3588 xenomai4实时性能5 总结 本…

最新版chrome如何下载和安装?附安装包

前言 大家好,我是小徐啊。我们在Java开发应用的时候,经常是需要用到浏览器来帮助我们开发的。而浏览器中,谷歌浏览器chrome当属功能最强大的浏览器。今天小徐就来介绍下如何安装chrome。文末附获取方式。 如何安装chrome 首先,双击chrome的安装包,开始安装。然后,可以看到…

[笔记]均分纸牌问题

Index链形均分纸牌每次仅可交换\(1\)张 每次可交换多张环形均分纸牌每次仅可交换\(1\)张 每次可交换多张拓展性很强的贪心问题。或许能推广到树之类的结构上,或者拓展到方案计数问题之类,不过目前还没想好啦。 链形均分纸牌 每次仅可交换\(1\)张 最基础的例题是这样的:有\(n…

掌握PageRank算法核心!你离Google优化高手只差一步!

0 前言 98年前的搜索引擎体验不好:返回结果质量不高:搜索结果不考虑网页质量,而通过时间顺序检索易被钻空:搜索引擎基于检索词检索,页面中检索词出现的频次越高,匹配度越高,这样就会出现网页作弊的情况。有些网页为了增加搜索引擎的排名,故意增加某个检索词频率当时Goo…

ApacheDirectoryStudio如何安装和使用?附安装包

前言 大家好,我是小徐啊。ldap数据库是我们Java开发中,经常会用到的一种数据库。这种数据库是树形结构的,和平常的mysql等数据库还不太一样。但目前对应连接ldap数据库的连接工具比较少,且功能也不强大。今天,小徐就来介绍下一款比较好的连接ldap数据库的连接功能,那就是…

服务器 数据库被攻击如何处理

最近系统有点卡,查看了一下系统事件,发现有人攻击服务器数据库。 以下是我的解决方案 1、修改密码位复杂的密码 2、修改默认数据库默认端口目前已解决下面的腾讯的小哥给的建议,总体差不多一个意思 1、服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂随机密码 ,…

字符数组及应用

这两个等价 长度都为10。这两个等价 长度都为11。如果有:则:注意: 作者QQ4577105