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.xdnf.cn/news/5467.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

25.停车场管理系统(基于web的Java项目)

目录 1.系统的受众说明 2.相关技术与方法 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 需求分析 3.2.1 系统功能描述 3.2.2 用例图分析 4. 系统设计 4.1 系统类分析 5. 系统详细设计与实现 5.1 用户登录 5.2 系统信…

string模拟实现构造+析构

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 string模拟实现构造 方案1&#xff08;初始化列表的实现&#xff09;&#xff1a; 这…

每日OJ题_牛客_小红的口罩_堆+贪心_C++_Java

目录 牛客_小红的口罩_堆贪心 题目解析 C代码 Java代码 牛客_小红的口罩_堆贪心 小红的口罩 描述&#xff1a; 疫情来了&#xff0c;小红网购了 n个口罩。众所周知&#xff0c;戴口罩是很不舒服的。小红每个口罩戴一天的初始不舒适度为 ai​。 小红有时候…

Bruno解决SSL验证问题

在测试接口的时候&#xff0c;我使用的是Bruno这个软件&#xff0c;开源离线的API测试软件。 主页是这样子的 今天在测试一个HTTPS的接口时候&#xff0c;因为这个HTTPS接口是用的是自签证书&#xff0c;所以就报错误了。 Error invoking remote method send-http-request: …

IBM股票分析:IBM的股价已经涨不动了吗?该买入还是卖出?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;由于第三季度业绩疲弱&#xff0c;摩根士丹利已将IBM目标股价下调到了208美元。 &#xff08;2&#xff09;IBM的软件业务虽然增长了9.7%&#xff0c;但咨询和基础设施业务却还在挣扎。 &#xff08;3&#xff09;猛兽财…

【数据结构】线性表——顺序表

文章目录 一、线性表二、顺序表2.1概念及结构2.2、顺序表接口实现2.2.1、顺序表的动态存储2.2.2、顺序表初始化2.2.3、检查空间判断进行增容2.2.4、顺序表尾插、尾删2.2.5、顺序表头插、头删2.2.6、顺序表查找2.2.7、顺序表在pos位置插入x2.2.8、顺序表删除pos位置的值2.2.9、顺…

JAVA基础:分页 (学习笔记)【DVD分页查看】

分页 分页一张表---创建entry类 分页多张表---创建pojo类 1&#xff0c;准备实体类 com.jr.entry.DVD 2&#xff0c;接口问题&#xff1a; &#xff08;1&#xff09;根据条件 --- 获得符合条件的总条数 &#xff08;2&#xff09;根据条件 --- 获得符合条件的集合数据。 …

macOS开发环境配置与应用开发(详细讲解)

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 macOS作为Apple公司推出的桌面操作系统&#xff0c;以其稳定性、优雅的用户界面和强大的开发工具吸引了大量开发者。对于…

Qt桌面应用开发 第二天(信号和槽 Lambda表达式)

目录 1.信号和槽 1.1信号 1.2信号和槽重载问题 1.3 注意事项 1.4信号和槽Lambda表达式 1.信号和槽 信号的发送者——信号——信号的接受者——信号的处理&#xff08;槽函数&#xff09; connect(信号的发送者&#xff0c;发送的信号&#xff0c;信号的接受者&#xff0…

ubuntu 22.04 server 安装 anaconda3

ubuntu 22.04 server 安装 anaconda3 https://www.anaconda.com/download/success Anaconda Installers wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh 其他的是 默认 Executing transaction: done installation finished. Do you wish to…

如何设置VSCODE快捷键光标移到行首和行尾

{ "key": "cmdhome", "command": "cursorTop", },{ "key": "cmdend", "command": "cursorBottom", }

台新金控在台北金融科技展上展示自研GenAI应用与LLM

在今年的台北金融科技展上&#xff0c;多家金融机构展示了他们的生成式人工智能&#xff08;GenAI&#xff09;应用。其中&#xff0c;台新金控也展示了包括升级后的智能客服、面向企业金融客户的拟真客服人员、影片生成服务以及音乐生成服务等应用。 然而&#xff0c;台新的亮…

项目开发流程规范文档

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

Go API 多种响应的规范化处理和简化策略

一个对外提供API接口的服务&#xff0c;在真正动工开发接口前一般需要先确定一下接口响应的通用格式&#xff0c;无论接口响应里返不返回业务数据&#xff0c;返回的数据是字符串、列表、对象还是其他类型都会遵照这个通用的响应格式。 既然一个项目接口的响应格式是确定的&…

poi excel数据统计导出

##poi excel导出案例 1.ajxa导出请求没有任何反应&#xff0c;打断点看了workBook中也有数据&#xff0c;网上查阅说ajax请求导出无法接收流&#xff0c;换成location.href,果然可以了 2.控制器代码 response.setCharacterEncoding("UTF-8");response.setContentTyp…

基于Python的影院电影购票系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

SQL Server 多数据源配置

目录 1、添加依赖 2. 配置数据源 3. 创建数据源配置类 4. 创建Mapper接口和XML映射文件 5. 使用Mapper 6.启动类配置 7.项目结构目录 1、添加依赖 首先&#xff0c;在pom.xml文件中添加SQL Server的JDBC驱动&#xff1a; <!-- SQL Server Connector --> <dep…

FlinkSql读取外部Mysql和HBase数据库的方法(scala)

我的Flink版本为1.13.6 <flink.version>1.13.6</flink.version> FlinkSql读取外部的MySQL是走的JDBC所以需要以下两个依赖&#xff1a; <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-jdbc_${scala.bina…

使用Rust实现http/https正向代理

相关库的安装 利用vcpkg安装openssl库 vcpkg install openssl:x64-windows并设置openssl库位置的环境变量 $Env:OPENSSL_DIR"D:/vcpkg/packages/openssl_x64-windows/"安装openssl软件&#xff0c;因为需要利用openssl生成自签名证书 Cargo依赖 [dependencies] …

vue3如何使用pinia设置全局状态,附常见面试题

1. stores/index.ts 文件 在 index.ts 中创建 store 实例并封装了注册逻辑&#xff0c;这样可以方便地将整个 Pinia 实例注册到 Vue 应用中。代码如下&#xff1a; import type { App } from vue import { createPinia } from piniaconst store createPinia()// 全局注册 st…