CSDN竞赛6期题解

2023-11-15

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
(请不要删掉此地址)

总结

这次竞赛题目比较简单,没多大必要写题解。更多的还是给出自己的一些体会和建议吧。

很多同学已经对比赛规则和编程体验给出了建议,比如复制粘贴自己在当前页面写的代码也计算粘贴次数很不合理,遇见for循环或者名称较长的变量不能复制只能手敲体验不太好;题目给出了标准输入的语句,但是给出的solution接口远不如leetcode的接口友好,比如答案需要用long long表示,给出的模板函数返回值还是int,容易给人误导。再比如调试需要完成等待几秒才能再次调试或者提交,以及调试过程中的warning信息会参与结果的比对等等。我主要的建议还是在命题方面。

作为大规模的竞赛,这次竞赛的命题真的很不用心。竞赛一般都是出的新题,而这次比赛直接从之前csdn的每日一题中随机抽了几题,而且难度也没有控制好,题目过于简单没有区分度。而且题目的描述不够详细,用例不够详细。

我的建议是:找个有算法竞赛背景命题人出新题,而不是随便在题库里抽题,才能保证公平性。命题完成需要另外的人进行审核,题目语义是否准确,用例是否充分,难度设置是否合理。都是需要review的地方,不是一两句话概括题意,用例随便出个简单的,连基本输入格式都没有覆盖到,每道题至少出三个用例,覆盖不同的情况。下面结合具体题目来说下具体有哪些需要改进的地方吧。

题目列表

1.严查枪火

题目描述

X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)

分析

作为简单的模拟题,如果给出了清晰的接口,是可以在两分钟内ac本题的,但是比赛时WA了几次才通过这题。因为题目没有对输入格式清晰地描述出来,这也与一开始我选择删掉题目的输入模板自己写输入有关,如果选择自己写输入的同学,就会发现题目对输入的描述有多么模糊了。

题目首先给定一个输入n,接下来输入n行字符串表示每个人携带的物品,问最后要关押多少人。题目唯一给的用例是一行一个字符串的情况,那么对于题意就有几种理解了:

  • 1.输入n个字符串,判断这n个字符串中包含违禁物品的有几个。
  • 2.输入n行字符串,每行字符串是连续的,通过对每行字符串的子串是否包含违禁品来判断是否应该关押。
  • 3.输入n行字符串,每行字符串由多个按空格隔开的字符串表示,表示每个人携带的若干件物品的名字,只要携带了违禁品就关押。

显然,根据题意是无法判断题目输入到底是什么格式的,只能不断的提交,一种情况一种情况的尝试,直至通过本题。而最终题目后台的输入格式是第三种情况,我觉得要么题目描述清楚,每行表示每个人携带的若干件物品,输入用空格隔开;要么增加几个用例来体现输入的格式,而不是这样模糊的描述。

最后,自己写输入要注意的是,读取n后需要getchar()来去掉n后面的回车,否则getline读取的第一个字符串就是回车字符。

代码

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
string t[3] = {"ak", "m4a1", "skr"};
bool check(string &s) {
	for(int i = 0;i < 3;i++) {
		if(s == t[i]) {
			return true;
		}
	}
	return false;
}
int main() {
	int n;
	std::vector<std::vector<std::string>> vec;
	std::cin>>n;
	string s;
	int res = 0;
	getchar();
	for(int i = 0;i < n;i++) {
		getline(cin,s);
		stringstream ss(s);
		string x;
		while(ss>>x) {
			if(check(x)) {
				res++;
				break;
			}
		}
	}
	std::cout<<res<<std::endl;
	return 0;
}

2.鬼画符门

题目描述

鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个
程序统计每年消耗数量最多的鬼画符吗?

分析

本题考查hash的简单应用。第一遍遍历字符串数组统计出每个字符串出现的次数,同时更新下出现最多的鬼画符次数。第二次遍历字符串数组,一旦遍历到某个鬼画符出现的次数等于最多的次数,返回该字符串即可。

代码

#include <iostream>
#include <string>
#include <sstream>
#include <unordered_map>
#include <algorithm>
#include <vector>
using namespace std;
unordered_map<string,int> m;
int main() {
	int n;
	std::cin>>n;
	vector<string> t;
	string s,res;
	for(int i = 0;i < n;i++) {
		cin>>s;
		t.push_back(s);
	}
	int p = 0;
	for(auto x : t) {
		m[x]++;
		p = max(p, m[x]);
	}
	for(auto x : t) {
		if(m[x] == p) {
			res = x;
			break;
		}
	}
	cout<<res<<endl;
	return 0;
}

3.收件邮箱

题目描述

已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

分析

这题也是之前每日一题里面的题目,稍微需要多一点判断的模拟题,考察对字符串的处理。

可以用res来记录最终的结果。逐位遍历str,然后进行判断:

  • 如果str[i]是‘d’,如果i不是在开头,也不是在str的倒数第三位,并且后两位是‘o’和’t‘,那么res需要追加上’.'。
  • 如果str[i]是’a’,还是要判断是否在开头或者结尾,不在的话后面的字符是’t’,并且之前没有转化过才给res追加上’@'。
  • 如果str[i]不是‘a’或者’d’,或者是前两种分支的else情况,直接追加到res末尾即可。

本题对字符串的模拟并不复杂,主要需要细心的地方是判断后面的字符时需要注意下标不要越界,以及判断为dot或者at后需要跳几位再继续遍历,最后就是在考虑到at只转化一次的基础上注意开头的at不转化的规则。

代码

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
std::string solution(std::string str){
	std::string res;
	int n = str.size();
	bool flag = true;
	for(int i = 0;i < n;i++) {
		if(str[i] == 'd') {
			if(i && i < n - 3 && str[i+1]=='o' && str[i+2]=='t') {
				res += ".";
				i += 2;
			}
			else res += "d";
		}
		else if(str[i] == 'a' && flag) {
			if(i && i < n - 2 && str[i+1] == 't') {
				res += "@";
				flag = false;
				i++;
			}
			else res += "a";
		}
		else res += str[i];
	}
	return res;
}
int main() {
	std::string str;
	std::cin>>str;
	std::string result = solution(str);
	std::cout<<result<<std::endl;
	return 0;
}

4.最长递增的区间长度

题目描述

给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

分析

这题也是每日一题的题目,第一次看见这题还以为用例有问题,因为第一印象是求最长递增子序列,然后觉得用例的最初递增子序列是2,3,8,9,长度是4。写了个LIS的代码提交上去WA了。再次读题发现求的是最长连续递增子序列。

一般算法题里不连续的叫做子序列,连续的叫做子串或者连续子序列,看见区间就没有反应过来。既然是求最长连续子序列长度,那么解法就比LIS问题更简单了。不用去考虑双指针或者DP的思想,直接模拟解决即可。

设res为当前遍历过的序列的最长连续递增子序列的长度,cnt是当前遍历到的最长连续递增子序列的长度,或者说是以当前遍历到的元素为末尾的最长连续递增子序列的长度。具体遍历过程就是:遍历当前元素,如果当前元素大于前一个元素,cnt++,否则cnt置为1表示以当前元素结尾的最长连续递增子序列的长度是1。每次cnt置1的时候以及遍历结束的时候尝试更新下最后的结果res即可。

遍历过程中蕴含DP的思想,即f[i]表示以第i个元素结尾的最长连续递增子序列的长度,最终的答案res = max(f[i])。由于在遍历过程中就更新了res,所以dp数组简化为了变量cnt。当然,写代码时候不用考虑背后的DP思想,也是可以很快写出来的。

代码

#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
const int N = 10005;
int f[N];
int solution(int n, std::vector<int>& vec){
	int res = 1;
	int cnt = 1;
	for(int i = 0;i < n;i++) {
		if(i && vec[i] > vec[i - 1]) cnt++;
		else {
			res = max(res,cnt);
			cnt = 1;
		}
	}
	res = max(res,cnt);
	return res;
}
int main() {
	int n;
	std::vector<int> vec;
	std::cin>>n;
	std::string line_0, token_0;
	getline(std::cin >> std::ws,line_0);
	std::stringstream tokens_0(line_0);
	while(std::getline(tokens_0, token_0, ' ')){
		vec.push_back(std::stoi(token_0));
	}
	int result = solution(n,vec);
	std::cout<<result<<std::endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSDN竞赛6期题解 的相关文章

  • 【寒假每日一题】蛇形矩阵

    问题1 题目来源 AcWing 题目链接 756 蛇形矩阵 AcWing题库 题目描述 输入两个整数 n 和 m 输出一个 n 行 m 列的矩阵 将数字 1 到 n m 按照回字蛇形填充至矩阵中 具体矩阵形式可参考样例 输入格式 输入共一行
  • 对OOD/OOP有较深的理解

    最近 经常有很多人在求职的时候遇到这样一个问题 对OOD OOP有较深的理解 那OOD OOP又是什么 那今天就来讲讲它们都是些什么 又如何去回答 1 OOA Object oriented analysis 面向对象分析 面向对象分析方法
  • Candence中查看MOS管阈值电压Vth、Vgs、Vds、跨导gm、Id等详细MOS参数的方法

    Candence中查看MOS管阈值电压Vth Vgs Vds gm Id等详细MOS参数的方法 ADE仿真结束后 点击工具栏Results Print Transient Operating Points 如果是dc仿真就选DC Opera
  • AcWing 422. 校门外的树

    题目 某校大门外长度为L的马路上有一排树 每两棵相邻的树之间的间隔都是1米 我们可以把马路看成一个数轴 马路的一端在数轴0的位置 另一端在L的位置 数轴上的每个整数点 即0 1 2 L 都种有一棵树 由于马路上有一些区域要用来建地铁 这些区
  • 蓝桥杯-第六届蓝桥杯C语言A组/B组/C组-Python题解

    目录 方程整数解 星系炸弹 奇妙的数字 牌型种数 手链样式 饮料换购 奖券数目 三羊献瑞 加法变乘法 隔行变色 立方尾不变 方程整数解 方程 a 2 b 2 c 2 1000 这个方程有整数解吗 有 a b c 6 8 30 就是一组解 你
  • RISC-V、ARM和X86架构

    1 要了解X86 ARM和RISC V架构的区别 就得先了解复杂指令集 CISC 和精简指令集 RISC A X86使用的是复杂指令集 CISC ARM和RISC V使用的是精简指令集 RISC 这便是属于这几种架构之间最大的区别 狭义的x
  • 右脑记忆法的个人理解

    先写个提纲 右脑记忆法 王峰 袁文魁等的记忆方法基础 也是大脑锦标赛 记忆大师的通用方法学 说是右脑记忆 其实就是图像记忆 因为形象化的信息 更容易记忆 最强大脑节目 记忆是很关键的一项能力 走进科学 记忆有魔方 http tv peopl
  • ieee-explore/springer文献免费下载办法

    http ieeexplore ieee org document xxxxxxx 改为 http ieeexplore ieee org sci hub tw document xxxxxxx 即可免费下载 是哈萨克斯坦女黑客搞的 见下文
  • 正确理解层次方框图

    正确的层次方框图示例 图片来源 https blog csdn net qq 15037231 article details 60467793 注意 在网上搜索层次方框图会出现很多类似的图 但很多都是错的 层次方框图用树形结构的一系列多层
  • 删除tomcat日志

    1 df 查看磁盘空间 2 对应用户进去删掉对应日志 3 重启tomcat 重新生成文件 或者 4 lsof grep deleted发现有大量刚刚删除文件的进程存在 kill掉进程 5 使用df 查看磁盘空间 发现已经回收 最好重启下to
  • CMake命令行添加编译参数

    CMake命令行添加编译参数 学习自 coroserver 例程 https github com windoze coroserver coroserver 是一个应用 Boost Asio 和 Boost Coroutine 的 多线程
  • 【暑期每日一题】洛谷 P6437 [COCI2011-2012#6] JACK

    题目链接 P6437 COCI2011 2012 6 JACK 洛谷 计算机科学教育新生态 luogu com cn 题目描述 给定 n 个正整数 a1 an 请从中选择 3 个数字 满足他们的和不大于给定的整数 m 请求出这个和最大可能是
  • CMakeLists.txt实例和语法介绍

    帮助文档 1 官方文档 一 实例 1 实例介绍 构建一个简单的加减法运算 需要调用静态库和动态库的实例 将add编译为静态库 sub编译为动态库 目录架构 gt tree LF 2 add add build sh add cpp add
  • How to delete local branches of GitExtension

    How to delete local branches of GitExtension Jin Qing s Column Dec 2021 GitExtension is a good tool After a long time of
  • 力扣每日一题——三角形的最大周长

    题目链接 class Solution public int largestPerimeter vector
  • 百度文库等类似工具的免费下载工具

    百度文库如何免费下载文献 软件介绍 百度文库如何免费下载文献 冰点文库下载器V3 1 9 亲测 可用 软件介绍 无需积分就可以自由下载百度 豆丁 丁香 MBALib 道客巴巴 Book118等文库文档 无需注册和登录 下载的文档最终生成高清
  • 谁说不同品牌内存无法兼容-关键调整频率和内存时序

    高手绕道 菜鸟文 当时2018年买了两根光威DDR4 8G 3000的灯条 2019年手欠又买了两根威刚DDR4 8G 3000的黄金马甲条 两组内存条都是京东上买的 当时买完两组之后插上就看看电影 跑跑虚拟机看看网页没发现啥问题 结果过了
  • Ansys workbench 云图如何不显示边框

    由于对workbench不熟悉 走了很多弯路 云图上有边框总是不好看 但是又不知道在哪里关掉它 经过一番摸索终于找到了 关闭前 关闭方法 工具栏 WireFrame 按钮 点一下即可 希望对有需要的朋友有用
  • 好的习惯

    从网上看到的一篇外文文章的翻译 感觉挺不错 分享一下 第三章 习惯一 积极主动 个人愿景的原则 人性本质是主动而非被动的 不仅能消极选择反应 更能主动创造有利环境 采取主动并不表示要强求 惹人厌或具侵略性 只是不逃避为自己开创前途的责任 最
  • 互补二元组

    时间限制 10000ms 单点时限 1000ms 内存限制 256MB 描述 给定N个整数二元组 X1 Y1 X2 Y2 XN YN 请你计算其中有多少对二元组 Xi Yi 和 Xj Yj 满足Xi Xj Yi Yj且i lt j 输入 第

随机推荐

  • elasticsearch sort script实现字段值等于某值排名靠前

    什么是script语言 script语言是es提供的一种支持自定义编程的用于复杂查询的脚本语言 主要类型有painless expressions等 需求描述 实际业务场景需要将某字段等于某值的排在前面 其他数据靠后 比如 雇员属性 nam
  • 阿里跟腾讯又㕛叒打起来了,这次是在东南亚

    腾讯与阿里的先头部队 已经在东南亚开始新的战争 在这之中 电商的争夺尤其激烈 神经浪游者 作者威廉 吉布森说 未来已来 只是分布得不太均匀 互联网的分布尤其如此 先是欧美 之后中国 如今 投资人和从业者纷纷押注 昔日的好时光将在东南亚将重现
  • sqlite3 提示 not found

    在android开发中使用adb shell下的sqlite3命令来查看SQLite数据库时 出现了 sqlite3 not found 错误 在网上搜索了一下问题的原因 原来是模拟器或真机中的 system xbin 目录下少了sqlit
  • 华为OD机试 - 工作安排 - 动态规划(Java 2023Q1 100分)

    目录 一 题目描述 二 输入描述 三 输出描述 四 动态规划 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 小明每周上班都会拿着自己的工作
  • vue设置全局过滤器

    src目录下新建文件夹filters 新建文件index js内容为 const timefilters getdate data console log data getdatetime data console log data exp
  • 十大Web网站漏洞扫描工具

    1 Nikto 这是一个开源的Web服务器扫描程序 它可以对Web服务器的多种项目 包括3500个潜在的危险文件 CGI 以及超过900个服务器版本 还有250 多个服务器上的版本特定问题 进行全面的测试 其扫描项目和插件经常更新并且可以自
  • 信号槽的返回值(QMetaObject::invokeMethod的用法)——Qt

    前言 之前从未想过信号槽是可以有返回值的 因为虽然信号发出去了 但是它在事件循环中 什么时候执行还不一定 这个想法固然是对的 但是这也不是不能实现的 我查了网上的一些资料 发现差不多有一下三种方法 1 信号槽里加指针或引用 这个不推荐 隐患
  • 并发处理

    1 并发活动 进程的引入 操作系统的特性之一是并发与共享 即在系统中 内存 同时存在几个相互独立的程序 这些程序在系统中既交叉地运行 又要共享系统中的资源 这就会引起一系列的问题 包括 对资源的竞争 运行程序之间的通信 程序之间的合作与协同
  • 分布式锁的实现

    目录 分布式锁 分布式锁的引出 单体锁存在的问题 共享数据不安全 超卖现象 锁的理解 拓展 分流 拓展 分流Nginx简单理解 分布式锁的引出 分布式锁的设计思路 分布式锁的常见应用场景 分布式锁方案 数据库的分布式锁如何实现 Redis分
  • 《手把手教你》系列练习篇之4-python+ selenium自动化测试(详细教程)

    1 简介 今天我们继续前边的练习 学习和练习一下 如何使用webdriver方法获取当前测试页面的URL 如何获取当前页面的title 如何打开浏览器的一个新建页面 如何操作单选按钮等等 这些小练习 来巩固基础 2 webdriver方法获
  • WebGL 实践篇(二)—— 屏幕坐标与裁剪坐标,片段着色器中的颜色定义

    一 裁剪坐标系 canvas坐标系以及屏幕坐标系 裁剪坐标 WebGL坐标系 的范围 1 1 原点在中间 x正值向右 y正值向上 屏幕坐标 原点在左上角 x正值向右 y正值向下 canvas坐标 与屏幕坐标相比 原点向右向下偏移 x y正值
  • 如何安装Jenkins并配置插件(清华源)

    Linux启动jenkins 将 jenkins war 放在 usr local jenkins 目录下 执行命令启动 Jenkins 1 nohup java jar jenkins war httpPort 8000 安装Jenkin
  • Gateway服务的搭建

    1 Gateway的作用 网关的核心功能特性 请求路由 权限控制 限流 架构图 权限控制 网关作为微服务入口 需要校验用户是是否有请求资格 如果没有则进行拦截 路由和负载均衡 一切请求都必须先经过gateway 但网关不处理业务 而是根据某
  • 微信公众号第三方平台开发,零基础入门。想学我教你啊

    在学习微信第三方平台开发之前你应该会的 1 常用接口测试工具的使用 postman 2 学会看第三方平台文档 这个很关键 不过很多还是喜欢百度 白嫖别人的操作文档 3 学习排查问题 分析问题 4 第三方平台的限制 和公众号 订阅号这些关系要
  • 前端node.js上传文件到服务器_从零开始: nodejs 搭建文件索引服务器(Part 1)

    在考虑要用nodejs搭建文件索引服务器来替代我原来那个笨重的Apache服务器 采用省心的bitnami lampstack搭建 然后配了背景图片和图标 之前 说实话我连javascript是什么都不清楚 所以 从语言上讲 确实是从零开始
  • 06-Redis缓存高可用集群

    上一篇 05 Redis高可用集群之水平扩展 1 集群方案比较 哨兵模式 在redis3 0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态 如果master节点异常 则会做主从切换 将某一台slave作为
  • JavaScript基础知识09——数据类型

    哈喽 大家好啊 这里是雷工笔记 我是雷工 数据类型比较常见 无论是对程序员 还是电气工程师来说 都再熟悉不过了 这里跟着教程了解一下 主要看跟自己以往在其他PLC C 组态软件中应用的有啥不同 一 了解数据类型 在计算机的世界就像黑客帝国中
  • 12306 APP 同一乘客、同列火车候补订单与硬座的处理规则!

    问题 国庆节没抢到回家的火车票 候补了该列车的卧铺 怕候补不到车票 又买了该列车的硬座 当候补订单候补到卧铺车票时 怎么处理 方案 结论 直接候补不成功 提示 XX 二代身份证 xxx 存在与本次购票行程冲突的车票
  • ctfshow- web1(50 point)

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 首先映入眼帘的是登录界面 尝试弱口令无果 可以注册 尝试注册一个账号 通过url发现这里是通过order by进行了排序 测试发现一共5个字
  • CSDN竞赛6期题解

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 总结 这次竞赛题目比较简单 没多大必要写题解 更多的还是给出自己的一些体会和建议吧 很多同学已经对比赛规则和编程体验给出了