【Acwing 周赛复盘】第91场周赛复盘(2023.2.18)

news/2024/4/25 6:09:24/文章来源:https://blog.csdn.net/qq_46025844/article/details/129208506

【Acwing 周赛复盘】第91场周赛复盘(2023.2.18)

周赛复盘 ✍️

本周个人排名:1286/3115

AC情况:2/3

这是博主参加的第六次周赛,周赛当晚有事,是后来定时自测的 😂

在 20 分钟内 AC 了 2 题,看了一下这个成绩应该是排在 400名左右的。

T1 签到题,考察数字的分解 ✅

T2 考察哈希表/桶思想 ✅

T3 一眼「二分答案」,但是 check 函数中的变量太多,不知道如何写 ❌ (经过复盘,发现自己潜在问题很多,具体见 T3 的分析部分)

不过这次 T3 只有 86 个同学通过(往常都是几百人通过),说明确实有难度,做不出来也算是情有可原。

继续加油,冲冲冲。🚀

image-20230224114420902


周赛信息 📚

时间:2023年 2 月 18 日 19:00-20:15

竞赛链接:https://www.acwing.com/activity/content/introduction/2893/

y总直播间:http://live.bilibili.com/21871779

y总录播讲解视频:【AcWing杯 - 第 91 场周赛讲解】


题目列表 🧑🏻‍💻

题目名称原题链接视频讲解难度
4861. 构造数列原题链接视频链接简单 🟢
4862. 浇花原题链接视频链接简单 🟢
4863. 构造新矩阵原题链接视频链接困难 🔴

题解 🚀

【题目A】构造数列

【题目描述】

我们规定如果一个 正整数 满足除最高位外其它所有数位均为 000,则称该正整数为圆数。

例如,1,8,900,70,50001,8,900,70,50001,8,900,70,5000 都是圆数,120,404,333,8008120,404,333,8008120,404,333,8008 都不是圆数。

给定一个正整数 nnn,请你构造一个 圆数 数列,要求:

  • 数列中所有元素相加之和恰好为 nnn
  • 数列长度尽可能短。

【输入】

第一行包含整数 TTT,表示共有 TTT 组测试数据。

每组数据占一行,包含一个整数 nnn

【输出】

每组数据输出两行结果,第一行输出数列长度,第二行输出构造数列。

如果方案不唯一,输出任意合理方案均可。

【数据范围】

前三个测试点满足 1≤T≤101 \le T \le 101T10

所有测试点满足 1≤T≤100001 \le T \le 100001T100001≤n≤100001 \le n \le 100001n10000

【输入样例1】

5
5009
7
9876
10000
10

【输出样例1】

2
5000 9
1
7
4
800 70 6 9000
1
10000
1
10

【原题链接】

https://www.acwing.com/problem/content/description/4864/


【题目分析】

签到题,考察数字的分解。可以直接对数字 n 进行分解,也可以将 n 转化成字符串分解。

【复盘后的优化代码】✅

数字分解法

#include<bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;
int T, n, a[N];int main() {ios::sync_with_stdio(false);  //cin读入优化cin.tie(0);cin >> T;while (T--) {cin >> n;int cnt = 0; // cnt统计非0位的个数int pow = 1; // pow记录当前数字需要乘上几个0// 分解当前数字nwhile (n > 0) {// 当前末尾数字非0,放入一个圆数if (n % 10) a[++cnt] = (n % 10) * pow;pow *= 10;n = n / 10;}// 输出结果cout << cnt << endl;for (int i = 1; i <= cnt; i++) cout << a[i] << " ";cout << endl;}return 0;
}

字符串分解法

#include<bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;int T, n, a[N];
string str;int main() {ios::sync_with_stdio(false);  //cin读入优化cin.tie(0);cin >> T;while (T--) {cin >> str;int cnt = 0, pow = 1;for (int i = str.length() - 1; i >= 0; i--) {  // 从后往前if (str[i] != '0') a[++cnt] = (str[i] - '0') * pow;pow *= 10;}cout << cnt << endl;for (int i = 1; i <= cnt; i++) cout << a[i] << " ";cout << endl;}return 0;
}


【题目B】浇花

【题目描述】

某公司养有观赏花,这些花十分娇贵,每天都需要且仅需要浇水一次。

如果某一天没给花浇水或者给花浇水超过一次,花就会在那一天死亡。

公司即将迎来 nnn 天假期,编号 1∼n1∼n1n

为了让花能够活过整个假期,公司领导安排了 mmm 个人(编号 1∼m1∼m1m)来公司浇花,其中第 iii 个人在第 [ai,bi][a_i,b_i][ai,bi] 天每天来公司浇一次花。

领导是按照时间顺序安排的浇花任务,保证了对于 1≤i≤m−11 \le i \le m−11im1,均满足:bi≤ai+1b_i \le a_{i+1}biai+1

给定领导的具体安排,请你判断,花能否活过整个假期,如果不能,请你输出它是在第几天死的,以及那一天的具体浇水次数。

【输入】

第一行包含两个整数 n,mn,mn,m

接下来 mmm 行,每行包含两个整数 ai,bia_i,b_iai,bi

【输出】

输出一行结果。

如果花能活过整个假期,则输出 OK

如果花不能活过整个假期,则输出两个整数 x,yx,yx,y,表示花是在第 xxx 天死的,这一天花被浇了 yyy 次水。

【数据范围】

444 个测试点满足 1≤n,m≤101 \le n,m \le 101n,m10

所有测试点满足 1≤n,m≤1051 \le n,m \le 10^51n,m1051≤ai≤bi≤n1 \le a_i \le b_i \le n1aibin

【输入样例1】

10 5
1 2
3 3
4 6
7 7
8 10

【输出样例1】

OK

【输入样例2】

10 5
1 2
2 3
4 5
7 8
9 10

【输出样例2】

2 2

【输入样例3】

10 5
1 2
3 3
5 7
7 7
7 10

【输出样例3】

4 0

【原题链接】

https://www.acwing.com/problem/content/description/4865/


【题目分析】

本题暴力法就是使用 桶思想,在本题的条件下可以 AC,但是如果去除「保证了对于 1≤i≤m−11 \le i \le m−11im1,均满足:bi≤ai+1b_i \le a_{i+1}biai+1」的条件,就会超时了。

所以推荐使用 差分,把模型抽象出来,即每个人都会给一段连续的天数 + 1(浇水),最后求判断每天被浇水了几次即可。

【复盘后的优化代码】✅

差分

#include<bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;int n, m, l, r, b[N];int main() {ios::sync_with_stdio(false);  //cin读入优化cin.tie(0);cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> l >> r;b[l]++, b[r + 1]--;  // 维护差分数组}// 还原for (int i = 1; i <= n; i++) {b[i] += b[i - 1];if (b[i] != 1) {cout << i << " " << b[i] << endl;return 0;}}cout << "OK" << endl;return 0;
}

【周赛现场 AC 代码】

暴力/桶思想

#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;
int n, m, x, y;
int b[N]; // 桶int main() {ios::sync_with_stdio(false);  //cin读入优化cin.tie(0);cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> x >> y;for (int j = x; j <= y; j++) // 将当前第i人负责的所有天数,放入桶中b[j]++;}// 判断每个桶中的元素数量是否为1for (int i = 1; i <= n; i++) {if (b[i] != 1) {cout << i << " " << b[i] << endl;return 0;}}cout << "OK" << endl;return 0;
}


【题目C】构造新矩阵

【题目描述】

给定一个 mmmnnn 列的整数矩阵,行编号 1∼m1∼m1m,列编号 1∼n1∼n1n

其中,第 iii 行第 jjj 列的元素为 pijp_{ij}pij

你可以任意抽取其中不超过 n−1n−1n1 行元素,这些元素之间保持同一行列关系不变,构成一个新矩阵。

构成新矩阵后,我们可以确定一个最大的整数 LLL,使得新矩阵中每一列都至少存在一个元素不小于 LLL

我们希望通过合理构造新矩阵,使得 LLL 的值尽可能大。

请你计算并输出 LLL 的最大可能值。

注意:矩阵一共有 mmm 行,但是抽取的行数上限是 n−1n−1n1 行,而不是 m−1m−1m1 行,读题时不要搞混行和列。

【输入】

第一行包含整数 TTT,表示共有 TTT 组测试数据。

每组数据首先包含一个空行。

第二行包含两个整数 m,nm,nm,n

接下来 mmm 行,每行包含 nnn 个整数,其中第 iii 行第 jjj 个整数表示 pijp_{ij}pij

【输出】

每组数据输出一行结果,一个整数,表示 LLL 的最大可能值。

【数据范围】

前三个测试点满足 1≤T≤51 \le T \le 51T52≤n×m≤1002 \le n×m \le 1002n×m100。所有

测试点满足 1≤T≤1041 \le T \le 10^41T1042≤n2 \le n2n2≤n×m≤1052 \le n×m \le 10^52n×m1051≤pij≤1091 \le p_{ij} \le 10^91pij109,一个测试点内所有数据的 n×mn×mn×m 值相加不超过 10510^5105

【输入样例】

52 2
1 2
3 44 3
1 3 1
3 1 1
1 2 2
1 1 32 3
5 3 4
2 5 14 2
7 9
8 1
9 6
10 82 4
6 5 2 1
7 9 7 2

【输出样例】

3
2
4
8
2

【原题链接】

https://www.acwing.com/problem/content/4866/


【题目分析】

一眼「二分答案」,但是苦于情况太多,没能够把 check 函数写出来,总结原因如下:

  • 审题能力 需要加强,对时间复杂度的恐惧 要降低。自己读题时,分析复杂度应该是:T∗log∗checkT * log * checkTlogcheck(但是本题 T 比较大,check 里面也很大,想着很容易超时,一下子人就比较慌)。但实际上,题目的意思应该是 T∗checkT * checkTcheck 这一个整体被控制在 10510^5105,所以是不会超时的。
    • 措施 🚀:仔细审题,对时间复杂度不要害怕,在没有更好的优化想法时,先把当前思路的代码敲出来。
  • 情况一多,就变得畏手畏脚,不敢动手。一会儿考虑这儿,一会儿考虑那儿,思路不够清晰,不够有逻辑。
    • 措施 🚀:下次做题时,遇到多种情况、边界条件等,像y总那样慢慢分析,把思路更加有条理的在纸上呈现出来(如下图)
  • 逻辑推理能力 还需加强,尤其是面对思维题的时候,总是差临门一脚。例如本题中,其实自己已经推导到了,求出每列的 maxV,并且知道要从 「行」 的角度进行转换,用「画点法」来模拟最大值的分布等。但是一直不知道该如何处理「选取 n−1n-1n1 行」这个过程,导致代码无法书写下去。
    • 措施🚀:多做题,多总结

y总的思路图,详细讲解见:https://www.acwing.com/video/4628/

image-20230224143331727

🍉 PS:本题由于空间限制,不能开 a[N][N] (N≤105)(N \le 10^5)(N105) 的数组,需要用二维 vector 来实现。

vector<int> g[N];  // 注意不是g[N][N]

【复盘后的优化代码】✅

#include<bits/stdc++.h>using namespace std;
const int N = 1e5 + 10;int T, n, m, tmp;
int row[N], col[N];
vector<int> g[N];  // 二维vecotr数组bool check(int L) {// 此题对时间卡的比较严,不要使用memsetfor (int i = 0; i < m; i++) row[i] = 0;for (int i = 0; i < n; i++) col[i] = 0;// row[k]存储第k行有几个>=L的数,col[k]存储第k列有几个>=L的数for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (g[i][j] >= L) {row[i]++, col[j]++;}}}// 检查每列是否有值>=Lfor (int i = 0; i < n; i++) {if (col[i] == 0) return false;}// 在每一列都有>=L元素的基础上,检查是否一行中有至少2个>=L的元素for (int i = 0; i < m; i++) {if (row[i] >= 2) return true;}return false;
}int main() {ios::sync_with_stdio(false);  //cin读入优化cin.tie(0);cin >> T;while (T--) {// 读入矩阵cin >> m >> n;for (int i = 0; i < m; i++) {g[i].clear();  // 记得初始化for (int j = 0; j < n; j++) {cin >> tmp;g[i].push_back(tmp);}}//第二种读入方式
//        for (int i = 0; i < m; i++) {
//            g[i].resize(n);
//            for (int j = 0; j < n; j++) {
//                cin >> g[i][j];
//            }
//        }// 对答案二分int l = 1, r = 1e9 + 10;while (l < r) {// l + r + 1的最大值<int_max,但是比较接近了,用LL会保险一点int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}cout << r << endl;}return 0;
}

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

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

相关文章

数据库|(六)连接查询

&#xff08;六&#xff09;连接查询1. 笛卡尔乘积2. 连接查询分类2.1 按年代分2.2 按功能分3. 等值连接(sql 92标准)3.1 特点3.2 一般使用3.3 为表取别名3.4 两表顺序可以调换3.5 可以加筛选3.6 可以加分组3.7 可以加排序3.8 可以实现三表连接4. 非等值连接(sql 92标准)5. sql…

LeetCode练习三:链表

文章目录一、链表基础1.1 无序表&#xff08;UnorderedList&#xff09;1.1.2 双向链表1.1.3 循环链表1.2 链表的基本操作1.2.1 定义链表结构1.2.2 建立线性链表1.2.3 求线性链表的长度1.2.4 查找元素1.2.5 插入元素1.2.6 改变元素1.2.7 删除元素1.3 有序表OrderedList1.4 链表…

39-Golang中的接口

Golang中的接口基本介绍基本语法注意事项和细节案例实现对Hero结构体切片的排序&#xff1a;sort.Sort(data Interface)实现接口和继承之间的比较区别基本介绍 interface类型可以定义一组方法&#xff0c;但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型…

直接在ide启动mitmproxy监听,脱离命令行启动,懒人福音

前言 本文解决了只能通过命令行启动 mitmproxy 的痛点。 在使用 mitmproxy 时候存在这样一个问题&#xff0c;就是每次启动它时候都需要通过命令行启动。 加上最近有位读者向我提问&#xff08;以前也有读者提问该问题&#xff09;&#xff1a;不通过命令行如何启动 mitmproxy监…

XML调用 CAPL Test Function

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

阿里限量出产Elasticsearch学习手册,确定不心动?

前言只有光头才能变强。不知道大家的公司用Elasticsearch多不多&#xff0c;反正我公司的是有在用的。平时听同事们聊天肯定避免不了不认识的技术栈&#xff0c;例如说&#xff1a;把数据放在引擎&#xff0c;从引擎取出数据等等。如果对引擎不了解的同学&#xff0c;就压根听不…

九龙证券|阿里+鸿蒙+人工智能+元宇宙概念热度爆棚,“会说话的猫”亮了!

近一周组织调研个股数量有240多只&#xff0c;汤姆猫成为调研组织数量最多的股票。 证券时报数据宝统计&#xff0c;近一周组织调研公司数量有240多家。从调研组织类型来看&#xff0c;证券公司调研相对最广泛&#xff0c;调研230多家公司。 “会说话的猫”亮了 汤姆猫成为近…

Flink高手之路1一Flink的简介

文章目录一、Flink简介1. Fink的引入2.Flink简介3.支持的编程语言4.Flink的特性5.Flink四大基石6.批处理和流处理二、Flink的架构1.Flink的角色2.编程模型一、Flink简介 1. Fink的引入 大数据的计算引擎&#xff0c;发展过程有四个阶段 第一代&#xff1a;Hadoop的MapReduce…

二叉搜索树中的众数Java解法

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf

【Web逆向】万方数据平台正文的逆向分析&#xff08;上篇--加密发送请求&#xff09;—— 逆向protobuf声明一、了解protobuf协议&#xff1a;二、前期准备&#xff1a;二、目标网站&#xff1a;三、开始分析&#xff1a;我们一句句分析&#xff1a;先for循环部分&#xff1a;后…

【算法】最短路算法

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

电子技术——输出阶类型

电子技术——输出阶类型 输出阶作为放大器的最后一阶&#xff0c;其必须有较低的阻抗来保证较小的增益损失。作为放大器的最后一阶&#xff0c;输出阶需要处理大信号类型&#xff0c;因此小信号估计模型不适用于输出阶。尽管如此&#xff0c;输出阶的线性也非常重要。实际上&a…

为什么要用线程池?

1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2.提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统资源&#…

Python实现贝叶斯优化器(Bayes_opt)优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器&#xff0c;用来寻找最优参数。贝叶斯优化器是…

AI_News周刊:第三期

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 2023.02.20—2023.02.25 News 1.OpenAI 现在正在帮助可口可乐改善其营销和运营 2023 年 2 月 21 日——贝恩公司今天宣布与 OpenAI 建立全球服务联盟&#xff0c;OpenAI 是人工智能系统 ChatGPT、DA…

java Spring JdbcTemplate配合mysql实现数据库表数据添加

本文为 java Spring JdbcTemplate 准备工作的续文 如果您还没有大家好JdbcTemplate 的基础环境 可以先查看前文 首先 之前数据库我们已经弄好了 然后 我们在下面创建一个表 我这里叫 user_list 每一个数据库表 要对应一个实体类 这里 我们打开上一文搭建的项目环境 src下创建…

【华为OD机试模拟题】用 C++ 实现 - 英文输入法(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 分积木(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 吃火锅(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - RSA 加密算法(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 构成的正方形数量(2023.Q1) 【华为OD机试模拟…

【原创】java+swing+mysql生肖星座查询系统设计与实现

今天我们来开发一个比较有趣的系统&#xff0c;根据生日查询生肖星座&#xff0c;输入生日&#xff0c;系统根据这个日期自动计算出生肖和星座信息反馈到界面。我们还是使用javaswingmysql去实现这样的一个系统。 功能分析&#xff1a; 生肖星座查询系统&#xff0c;顾名思义…

【CSS】CSS 层叠样式表 ① ( 简介 | CSS 引入方式 - 内联样式 | 内联样式语法 | 内联样式缺点 )

文章目录一、CSS 层叠样式表二、CSS 引入方式 - 内联样式1、内联样式语法2、内联样式缺点3、内联样式代码示例① 核心代码示例② 完整代码示例③ 执行结果一、CSS 层叠样式表 CSS 全称 Cascading Style Sheets , 层叠样式表 ; 作用如下 : 设置 HTML 页面 文本内容 的 字体 , 颜…

【华为OD机试模拟题】用 C++ 实现 - 最少停车数(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…