当前位置: 首页 > news >正文

电子科技大学链时代工作室招新题C语言部分---题号E

1. 题目

  这道题大概的意思是说,一座城市中被埋了许多雷(用一个只含0和1的字符串表示城市,1代表有雷,0代表无雷)。

你作为一个排雷兵,需要花最少的钱引爆所有的雷来使城市中不再有雷(太逆天了,不知道是不是我理解错了,但总之就是要少花钱,还要引爆所有雷)。

当一个雷被引爆时,相邻的雷都会爆炸,所以你可以选择在没有雷的地方埋雷,使得两片雷区连起来,这样你就可以只花一次引爆需要的钱来引爆两片雷区。当然,埋雷也要花钱,不过在大多数案例中,埋雷的花费会较少。

输入

第一行输入一个整形t(1<=t<=100000),表示接下来需要进行几轮排雷。

对于每一次排雷,第一行分别输入引爆雷和埋雷的花费(a和b, 且1<=a,b<=1000),第二行输入一个只含0和1的字符串,表示城市中埋雷的情况。

对于每次测试,各轮排雷输入的字符串的总长度不会超过100000。

输出

依次输出每轮排雷的最低花费。

例如,题中所给的例子的第二轮排雷

引爆的花费是5,埋雷的花费是1

城市中雷的情况是01101110

于是选择将两片雷区连起来(在第四个位置上埋雷),再进行引爆,总花费是6。


2. 第一版解法

 这一版并不完全算作第一版,其实是第二版。由于第一版老是通不过,于是我气急败坏地写了个暴力解法

2.1 思路

1. 最前端的0不需要考虑,因为在这这里埋雷毫无意义,于是先将字符串缩短一下,使得字符串以1开头。

2. 最后段其实也同样不需要考虑,但第一版的解法能够直接无视掉最后一段零(如果有的话)。

3. 除开这两段无需考虑的零,其他每一段零我们都需要考虑是否要埋雷来链接雷区。判断是否要埋雷的逻辑也很简单,因为链接一次雷区可以使我少引爆一次,所以就判断是埋雷花费高,还是多引爆一次花费高。

4. 在不考虑最后一段零的情况下,雷区数一定比零的段数多一,当每次决定不埋雷时,无雷区的数量加加,雷区数量就是无雷区数量加一。

5. 遍历字符串,用if语句来具体处理每一种情况。

2.2 代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int n = 0;scanf("%d", &n);int* num = (int*)malloc(sizeof(int) * n);for(int i = 0; i < n; i++){int a = 0, b = 0, count = 0, j = 1, a_num = 1,b_num = 0, flag1 = 1, flag2 = 0;char* ret = NULL;char arr[100000] = {0};scanf("%d%d", &a, &b);getchar();while((arr[0] = getchar()) == '0');while((arr[j++] = getchar()) != '\n'){flag1 = 0;}if(flag1){num[i] = 0;continue;}for(int i = 1; i < j; i++){if(arr[i] == '1'&&arr[i-1] == '0')//a数量加一,结算前方0{if(a <= b * count)a_num++;elseb_num = count;count = 0;}else if(arr[i] == '1'&&arr[i-1] == '1')//连续一无意义{;}else if(arr[i] == '0'&&arr[i-1] == '1')//开始统计零{count++;flag2 = 1;}else if(arr[i] == '0'&&arr[i-1] == '0'&&flag2)//连续零统计{count++;}}if(a_num == 0){num[i] = 0;continue;}num[i] = a_num * a + b_num * b;}for(int i = 0; i < n; i++){printf("%d\n", num[i]);}free(num);return 0;
}

2.3 总结

前面已经说了,这是一气之下写出来的破罐子破摔写法,没有什么参考意义。

经过这几天的做题,我发现,当你开始用if语句来处理各种特殊情况时,你就失败一半了。


3. 最终版解法

这一版才是严格意义上的第一版,只不过之前由于许多画蛇添足的操作导致程序老是通不过。后来上面那一版也过不了,我又回来继续改这一版,删掉了几句就过了。

3.1 思路

1. 这一版与上一版的不同在于,上一版采用的是依次遍历数组,用if语句逐个处理每个元素的方法;这一版采用了函数strtok。

2. 我们的目的其实就是找到两端都是1的无雷区,那么我们完全可以用strtok函数来将字符串分割出一个个的连续0段,然后判断是否要埋雷。

3. 这一次我们需要将尾端的无雷区也消减掉。

3.2 代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{int n = 0;scanf("%d", &n);int* num = (int*)malloc(sizeof(int) * n);for(int i = 0; i < n; i++){int a = 0, b = 0, count = 1, coin = 0, kong = 0, j = 0, flag1 = 1, flag2 = 1;char* ret = NULL;char arr[100006] = {0};char* sep = "1";scanf("%d%d", &a, &b);getchar();while((arr[j] = getchar()) != '\n'){if(arr[j] == '1')flag1 = 0;if(arr[j] == '0')flag2 = 0;j++;}if(flag1){num[i] = 0;continue;}if(flag2){num[i] = a;continue;}char* e = arr;char* f = arr + j - 1;while(*e == '0'&&e <= f){e++;};while(*f == '0'&&e <= f){f--;};*f = '\0';for(ret = strtok(e, sep); ret != NULL; ret = strtok(NULL, sep)){int len = strlen(ret);if(len*b < a){coin += len*b;}else{kong++;}}coin += (kong+1) * a;num[i] = coin;}for(int i = 0; i < n; i++){printf("%d\n", num[i]);}free(num);return 0;
}

3.3 总结

能用通用算法的,绝不用if语句来处理特使情况。

所以千万不要放弃一个较好的算法而去尝试暴力解法。

相关文章:

电子科技大学链时代工作室招新题C语言部分---题号E

1. 题目 这道题大概的意思是说&#xff0c;一座城市中被埋了许多雷&#xff08;用一个只含0和1的字符串表示城市&#xff0c;1代表有雷&#xff0c;0代表无雷&#xff09;。 你作为一个排雷兵&#xff0c;需要花最少的钱引爆所有的雷来使城市中不再有雷&#xff08;太逆天了&a…...

K8S CNI

OCI概念 OCI&#xff0c;Open Container Initiative&#xff0c;开放容器标准&#xff0c;是一个轻量级&#xff0c;开放的治理结构&#xff08;项目&#xff09;&#xff0c;在 Linux 基金会的支持下成立&#xff0c;致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…...

Python数据分析实验一:Python数据采集与存储

目录 一、实验目的与要求二、实验过程三、主要程序清单和运行结果1、爬取 “中国南海网” 站点上的相关信息2、爬取天气网站上的北京的历史天气信息 四、程序运行结果五、实验体会 一、实验目的与要求 1、目的&#xff1a; 理解抓取网页数据的一般处理过程&#xff1b;熟悉应用…...

丘一丘正则表达式

正则表达式(regular expression,regex,RE) 正则表达式是一种用来简洁表达一组字符串的表达式正则表达式是一种通用的字符串表达框架正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具正则表达式可以用来判断某字符串的特征归属 正则表达式常用操作符 操作符说明实…...

工业物联网平台在水务环保、暖通制冷、电力能源等行业的应用

随着科技的不断发展&#xff0c;工业物联网平台作为连接物理世界与数字世界的桥梁&#xff0c;正逐渐成为推动各行业智能化转型的关键力量。在水务环保、暖通制冷、电力能源等行业&#xff0c;工业物联网平台的应用尤为广泛&#xff0c;对于提升运营效率、降低能耗、优化管理等…...

【研发日记】Matlab/Simulink技能解锁(二)——在Matlab Function编辑窗口Debug

文章目录 前言 行断点 条件断点 按行步进 Watch Value 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 行断点 当Matlab Function出现异常时&#xff0c;如果能确定大致的代码段&#xff0c;就可以在相应的行上设置一…...

从键盘输入两个数,求它们的和并输出 从键盘输入三个数到a,b,c中,按公式值输出

别急别急&#xff0c;先看完 (从初学者出发&#xff09; 从键盘输入两个数&#xff0c;求它们的和并输出 作者 陈春晖 单位 浙江大学 本题目要求读入2个整数A和B&#xff0c;然后输出它们的和。 输入格式: 在一行中给出一个被加数 在另一行中给出一个加数 输出格式: 在…...

密码解密 C卷(100%用例)(JavaPythonC++Node.jsC语言)

给定一段“密文“字符串s,其中字符都是经过"密码本”映射的,现需要将"密文"解密并且输出 映射的规则(a-i)分别用(1-9)表示;(j-z")分别用(10-"26”)表示 约束:映射始终唯一 输入描述: “密文”字符串 输出描述: 明文字符串 补充说明: 翻译后的文本…...

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后&#xff0c;总是有这个报错&#xff0c;有时候还有别的icon也找不见 一通调查之后&#xff0c;发现是因为引入了一个vue插件 这个插件引入之后&#xff0c;webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…...

『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)

文章目录 &#x1f984; 进程替换&#x1f9a9; execl()函数&#x1f9a9; execlp()函数&#x1f9a9; execle()函数&#x1f9a9; execv()函数&#x1f9a9; execvp()函数&#x1f9a9; execvpe()函数&#x1f9a9; execve()函数 &#x1f984; 简单Shell命令行解释器的实现&a…...

【Linux】从零开始认识进程 — 前篇

我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。。——山本耀司 从零开始认识进程 1 认识冯诺依曼体系2 操作系统3 进程3.1 什么是进程&#xff1f;&#xff1f;&#xff1f;3.2 进程管理PCB 3.3 Linux中的进程深入理解 3.4 进程创建总结 送给…...

公众号留言功能恢复了,你的开通了吗?

了解公众号的人都知道&#xff0c;腾讯在2018年3月宣布暂停新注册公众号的留言功能&#xff0c;这之后注册的公众号都不具备留言功能。 这成了很多号主运营人的一块心病&#xff0c;也包括我。 没有留言&#xff0c;就好似一个人玩单机游戏&#xff0c;无法与读者互动&#xff…...

C语言葵花宝典之——文件操作

前言&#xff1a; 在之前的学习中&#xff0c;我们所写的C语言程序总是在运行结束之后&#xff0c;就会自动销毁&#xff0c;那如果我们想将一个结果进行长期存储应该如何操作呢&#xff1f;这时候就需要我们用文件来操作。 目录 1、什么是文件&#xff1f; 1.1 程序文件 1.2…...

SSM框架,MyBatis-Plus的学习(下)

条件构造器 使用MyBatis-Plus的条件构造器&#xff0c;可以构建灵活高效的查询条件&#xff0c;可以通过链式调用来组合多个条件。 条件构造器的继承结构 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xf…...

边缘计算网关的工作原理及其在工业领域的应用价值-天拓四方

随着物联网技术的快速发展&#xff0c;物联网时代已经悄然来临。在这个时代&#xff0c;数以亿计的设备相互连接&#xff0c;共享数据&#xff0c;共同构建智慧的世界。边缘计算网关通过将计算能力和数据存储推向网络的边缘&#xff0c;实现了对海量数据的实时处理&#xff0c;…...

下载指定版本的pytorch

下载网址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 参考博客网址&#xff1a;https://blog.csdn.net/wusuoweiieq/article/details/132773977...

STL:List从0到1

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…...

利用高分五号02星高光谱数据进行地物识别

高分五号02星搭载了一台60公里幅宽、330谱段、30米分辨率的可见短波红外高光谱相机&#xff08;AHSI&#xff09;&#xff0c;可见近红外&#xff08;400~1000nm&#xff09;和短波红外光谱&#xff08;1000~2500nm&#xff09;分辨率分别达到5纳米和10纳米。单看参数性能优越&…...

前端如何识别上传的二维码---jsQR

npm npm i -d jsqrhtml <el-button click"$refs.input.click()">识别</el-button> <input type"file" style"display: none" id"input" input"upload">js import jsQR from "jsqr";decodeQR…...

flink1.18.0 自定义函数 接收row类型的参数

比如sql中某字段类型 array<row<f1 string,f2 string,f3 string,f4 bigint>> 现在需要编写 tableFunction 需要接受的参数如上 解决方案 用户定义函数|阿帕奇弗林克 --- User-defined Functions | Apache Flink...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...