ZISUOJ 2024算法基础公选课练习一(1)

前言、

        又是一年算法公选课,与去年不同的是今年学了一些纯C++(而不是带类的C)

一、我的C++模板

1.1 模板1

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);return 0;
}

1.2 模板2

#include <bits/stdc++.h>
using i64 = long long;void solve() {}
int main() {std::cin.tie(nullptr)->sync_with_stdio(false);int t = 1;//如果有多组数据,则放开下一行的注释// std::cin >> t;while(t--) {solve();}return 0;
}

 

二、题目总览

三、具体题目

        3.1 问题 A: 删数问题(Tan1):

思路:

        用贪心算法(属于不是很容易察觉的那种)。跑k次循环,每次循环找出第一个逆序对,此时需要删去的就是逆序对中的第一个数(较大的那个);如果找不到逆序对,那么删除最后一个数。另外,特判出现前导零的情况,既可以用string的erase()方法,也可以用reverse()函数反转字符串,再使用pop_back()函数(主要是因为没有pop_front()函数,猜测string是拿vector实现的,而不是deque)。

参考代码1:

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::string a;int k;std::cin >> a >> k;for(int i = 0;i<k;i++) {int idx = 0;while(idx<a.size()-1&&a[idx]<=a[idx+1]) idx++;if(idx!=a.size()-1) {a.erase(idx,1);}else {a.erase(a.size()-1,1);}}while(a.front()=='0'&&a.size()>1) {a.erase(0,1);}std::cout << a << '\n';return 0;
}

参考代码2:

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::string a;int k;std::cin >> a >> k;for(int i = 0;i<k;i++) {int idx = 0;while(idx<a.size()-1&&a[idx]<=a[idx+1]) idx++;if(idx!=a.size()-1) {a.erase(idx,1);}else {a.erase(a.size()-1,1);}}std::string ans = a;std::reverse(ans.begin(),ans.end());while(ans.back()=='0'&&ans.size()>1){ans.pop_back();}std::reverse(ans.begin(),ans.end());std::cout << ans << '\n';return 0;
}

        3.2 问题 B: 输出亲朋字符串:

思路:

        没啥好说的,模拟一下就行,如果打算直接在原字符串上修改,那么需要暂存第一个字符

参考代码:

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::string s;std::getline(std::cin,s);char tmp = s[0];for(int i = 0;i<s.size();i++) {if(i!=s.size()-1) {s[i]+=s[i+1];}else {s[i]+=tmp;}}std::cout << s << '\n';return 0;
}

        3.3 问题 C: 密钥加密:

思路:

        注意题中的两个模运算,因为字符串可能存在空格,所以读数据用getline()来读

参考代码:

这里有两个小技巧

 1.字符'0'到'9'转数字,我们可以直接异或48,同理,数字转字符'0'到'9'也可以直接异或48得到

  2.string下标从0开始,我们可以让它的前面拼接一个字符(通常是空格),这样它有意义的字符下标就从1开始,当然输出的时候记得把第一个字符去掉再输出

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::string key,str;while(std::getline(std::cin,key)&&std::getline(std::cin,str)) {int len_key = key.size();int len_str = str.size();std::vector<int> real_key;real_key.emplace_back(key[len_key-1]^48);for(int i = 0;i<len_key-1;i++) {real_key.emplace_back(key[i]^48);}str = " "+str;for(int i = 1;i<=str.size();i++) {str[i] = str[i]+real_key[i%len_key];str[i] = str[i]>122?str[i]-91:str[i];}str.erase(0,1);std::cout << str << '\n';}return 0;
}

        3.4 问题 D: 排列对称串:

思路:

如果一个字符串前后反转还等于反转前的值,那么它就是对称的字符串,把对称的字符串放进vector,然后排序一下,排序可以写cmp()函数,也可以用C++11的语法糖-匿名函数(我下面的代码是拿匿名函数写的),最后输出vector的内容即可

参考代码:

小技巧:

基于范围的for循环也是C++11的新语法糖,可以遍历一个容器,减少代码书写量

#include <bits/stdc++.h>
using i64 = long long;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::vector<std::string> v;std::string str;while(std::getline(std::cin,str)) {std::string reverse_str = str;std::reverse(reverse_str.begin(),reverse_str.end());if(reverse_str==str) {v.emplace_back(str);}}std::sort(v.begin(),v.end(),[&](const std::string &s1,const std::string &s2)->bool {if(s1.size()!=s2.size()) return s1.size()<s2.size();return s1<s2;});for(auto &vi:v) {std::cout << vi << '\n';}return 0;
}

3.5 问题 E: 《庆余年》之四大宗师:

思路:

利用哈希表先把每个人的积分算出来,然后拷贝到vector中排序(因为哈希表不支持排序),然后根据要求排序,排序好后输出即可

参考代码:

小技巧:

拷贝可以用copy()函数实现,也可以写一个for循环,然后把数据emplace_back进vector

#include <bits/stdc++.h>
using i64 = long long;
using psi = std::pair<std::string,int>;int main() {std::cin.tie(nullptr)->sync_with_stdio(false);std::unordered_map<std::string,int> mp;std::string player1,player2,result;for(int t = 0;t<6;t++) {std::cin >> player1 >> player2 >> result;if(result=="S") {mp[player1]+=3;}else if(result=="F") {mp[player2]+=3;}else {mp[player1]+=1;mp[player2]+=1;}}std::vector<psi> v(mp.size());std::copy(mp.begin(),mp.end(),v.begin());std::sort(v.begin(),v.end(),[&](const psi &p1,const psi &p2)->bool {if(p1.second!=p2.second) return p1.second>p2.second;return p1.first<p2.first;});for(auto &player:v) {std::cout << player.first << '\n';}return 0;
}

后记:

我写了很多C++11的语法糖,C++新版本出了越来越多的语法糖,存在即合理。新语法糖肯定有优秀的地方,我们在书写代码的时候应该尽可能多地使用新语法

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

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

相关文章

基于STM32的八位数码管显示Proteus仿真设计

基于STM32的八位数码管显示Proteus仿真设计 1.主要功能2.仿真设计3. 程序设计4. 设计报告5. 资料清单&下载链接 基于STM32的八位数码管显示Proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;…

【机器学习】Lesson 4 - 朴素贝叶斯(NB)文本分类

目录 背景 一、适用数据集 1. 数据集选择 1.1 适用领域 1.2 数据集维度&#xff08;特征数&#xff09; 1.3 数据行数 2. 本文数据集介绍 2.1 数据集特征 2.2 数据格式 3. 数据集下载 二、算法原理 1. 朴素贝叶斯定理 2. 算法逻辑 3. 运行步骤 4. 更多延申模型 …

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

【ChatGPT】让ChatGPT在回答中附带参考文献与来源

让ChatGPT在回答中附带参考文献与来源 在撰写内容时&#xff0c;引用参考文献和来源可以增强信息的可信度和权威性。通过引导ChatGPT生成带有参考文献的回答&#xff0c;用户能够获取更可靠的信息和背景资料。本文将探讨如何有效地引导ChatGPT在回答中附带参考文献与来源。 一…

Flutter鸿蒙next 中的 Expanded 和 Flexible 使用技巧详解

在 Flutter 开发中&#xff0c;Expanded 和 Flexible 是两个非常常用的布局控件&#xff0c;它们可以帮助开发者更加灵活地管理 UI 布局的空间分配。虽然它们看起来非常相似&#xff0c;但它们的功能和使用场景有所不同。理解这两者的区别&#xff0c;能帮助你在构建复杂 UI 布…

使用Vue3和Vue2进行开发的区别

使用Vue3和Vue2进行开发的区别 笔者虽然老早就是用vue3进行开发了&#xff0c;但是上次有人问道使用vue3进行开发跟使用vue2进行开发的区别有哪些这个问题的时候&#xff0c;回答的还是有些琐碎&#xff0c;干脆今天专门整理一下&#xff0c;做个记录。 一、再也不用set了 众所…

项目开发流程规范文档

项目开发流程规范文档 目标: 明确项目组中需求管理人员, 交互设计, 美工以及开发之间的工作输入输出产物. 明确各岗位职责. 以免造成开发, 产品经理以及项目经理之间理解不到位, 沟通成本过高,返工造成资源浪费. 所有环节产生的文档都可以作为项目交付的资源. 而不是事后再补文…

springcloud各组件说明

Spring Cloud 是一个构建分布式微服务架构的开源框架&#xff0c;提供了一系列的组件和工具&#xff0c;用于实现服务治理、负载均衡、服务调用、断路器、API网关、配置中心、链路追踪等功能。 1. Eureka - 服务注册与发现 原理 Eureka 是 Netflix 开源的一个服务发现组件&am…

【入门篇】2.10 串口打印Helloworld

目录 一,printf函数 二,printf函数示例 三,fputc函数 四,重定义fputc函数 一,printf函数 如果我们要通过串口输出“Helloworld”,就需要printf函数。那么如何满足在串口输出“Helloworld”呢? printf是 C 语言中的一个标准库函数,主要用于向标准输出设备输出格式…

在docker里创建 bridge 网络联通不同容器

1.网络创建&#xff1a; docker network create --subnet192.168.1.0/24 --gateway192.168.1.1 uav_management 2.查看网络&#xff1a; docker network ls 3.给已经创建的容器分配ip: docker network connect --ip 192.168.1.10 uav_management 容器名/容器id 示例&#xf…

ChatGPT o1与GPT-4o、Claude 3.5 Sonnet和Gemini 1.5 Pro的比较

全新的ChatGPT o1模型&#xff08;代号“Strawberry”&#xff09;是OpenAI的最新进展&#xff0c;专注于以前的AI模型难以应对的领域&#xff1a;高层次推理、数学和复杂编程。OpenAI设计o1模型以花费更多时间思考问题&#xff0c;使其在需要逐层推理的任务中提高准确性。本文…

【极限编程(XP)】

极限编程&#xff08;XP&#xff09;简介 定义与核心价值观&#xff1a;极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09;是一种轻量级、敏捷的软件开发方法。它强调团队合作、客户参与、持续测试和快速反馈等价值观&#xff0c;旨在提高软件开发的效率和质…

低代码用户中心:简化开发,提升效率的新时代

随着数字化转型的加速&#xff0c;企业对于快速交付高质量应用的需求日益增长。在这个背景下&#xff0c;低代码开发平台应运而生&#xff0c;成为越来越多企业和开发者的首选工具。今天&#xff0c;我们将聚焦于低代码用户中心&#xff0c;探讨其如何帮助开发者简化流程、提升…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起&#xff0c;Docker作为一种轻量级的容器技术&#xff0c;已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南&#xff0c;帮助他们在CentOS系统上安装和配置Docker及相关组件&#xff0c;如Docker Compose和私有…

前端八股文(二)CSS 持续更新中。。。

1.css3新增 新增属性选择器、伪类选择器 新增text-shadow、box-shadow、border-radius 新增transform、transition、动画keyframes、animation 新增flex、grid布局&#xff0c;媒体查询media 新增box-sizing&#xff1a;border-box怪异盒模型 content-box标准盒模型 2.说…

MySQL日期时间函数大全

DAYOFWEEK(date)  返回日期date是星期几(1星期天,2星期一,……7星期六,ODBC标准) mysql> select DAYOFWEEK(1998-02-03);   -> 3 WEEKDAY(date)  返回日期date是星期几(0星期一,1星期二,……6 星期天)。 mysql> select WEEKDAY(1997-10-04 22:23:00);   -> 5…

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址&#xff1a;https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本&#xff1a;Redis7.4.1 什么是 ACL&#xff1f; ACL&#xff08;Access Control List&#xff09;&#xff0c;权限控制列表&#xff0c;是 Redis 提供的一种…

淘宝反爬虫机制的主要手段有哪些?

淘宝的反爬虫机制主要有以下手段&#xff1a; 一、用户身份识别与验证&#xff1a; User-Agent 识别&#xff1a;通过检测 HTTP 请求头中的 User-Agent 字段来判断请求是否来自合法的浏览器。正常用户使用不同浏览器访问时&#xff0c;User-Agent 会有所不同&#xff0c;而爬虫…

2024最新gewe开发微信机器人教程说明

微信时代&#xff0c;越来越多的业务/服务沟通已直接在微信上完成&#xff0c;但在沟通效率及员工管理方面却存在如下问题&#xff1a; 1、现有的微信功能&#xff0c;已无法满足与客户沟通时的高效率要求 2、当员工掌管的微信号若干或更多时&#xff0c;迫切需要有个汇总工具…

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展&#xff0c;人们的…