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;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

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

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

项目开发流程规范文档

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

在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…

【极限编程(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和私有…

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;人们的…

如何使用Langchain集成Kimi AI(Moonshot AI)

如何使用Langchain集成Kimi&#xff08;Moonshot AI&#xff09; 一、获取API密钥1. 注册账号2. 获取密钥 二、环境配置三、上手四、整合一下五、检验一下成果六、官方网站 一、获取API密钥 1. 注册账号 毕竟只有注册过帐号才能拿到key~ Moonshot 登陆 2. 获取密钥 用户中心…

前端开发模板Pear Admin Layui

目录 基本资料学习笔记04-Pear-Admin-Layui模板运行05-Pear-Admin-Layui-GIT方式代...06-Pear-Admin与Vue对比 & 07-Pear-Admin与Vue对比补充09-Pear-Admin-CRUD练习-数据库表创建12-Pear-Admin-CRUD练习-引入其它依赖 & 13-Pear-Admin-CRUD练习-三层架构以及常见配置 …

新世联科技:NG2-A-7在DAC空气捕集提取CO2的应用

一、DAC空气捕集提取CO2的介绍 直接空气碳捕获&#xff08;Direct Air Capture&#xff0c;简称DAC&#xff09;是一种直接从大气中提取二氧化碳的技术。 二、DAC空气捕集提取CO2的前景 从大气中提取的这种二氧化碳可以作为循环经济的一部分以各种不同方式使用。未来&#xf…

uni-app 封装图表功能

文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能&#xff0c;两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词&#xff0c;会出现几款图表工具&#xff0c;通过大家的下载量&#xff0c;可以看到秋云这个库是比较受欢迎的&#xff0c;其…

详细解读个性化定制大杀器IP-Adapter代码

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;IP-Adapter作为Diffusion Models最成功的技术之一&#xff0c;已经在诸多互联网应用中落地。介绍IP-Adapter原理和应用的博客有很多&#xff0c;但是逐行详细解读代码的博客很少。这篇博客从细节出发&#xff…

数据采集之scrapy框架2

本博文使用自动化爬虫框架完成微信开放社区文档信息的爬取&#xff08;重点理解 scrapy 框架自动化爬 虫构建过程&#xff0c;能够分析 LinkExtractor 和 Rule 规则的基本用法&#xff09; 包结构目录如下图所示&#xff1a; 主要代码&#xff1a; &#xff08; items.p…

深⼊理解指针(2)

目录 1. const修饰指针及变量 2. 野指针 3. assert断⾔ 4. 指针的传址调⽤ 一 const修饰指针及变量&#xff08;const是场属性——不能改变的属性&#xff09; 1 const修饰变量 那怎么证明被const修饰的变量本质还是变量呢&#xff1f; 上面我们绕过n&#xff0c;使…