当前位置: 首页 > 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...

OpenClaw移动端适配:通过飞书调用Kimi-VL-A3B-Thinking多模态服务

OpenClaw移动端适配&#xff1a;通过飞书调用Kimi-VL-A3B-Thinking多模态服务 1. 为什么需要移动端适配 作为一个长期依赖OpenClaw进行本地自动化任务的用户&#xff0c;我最近遇到了一个痛点&#xff1a;当我在户外或出差时&#xff0c;无法方便地使用OpenClaw的强大功能。虽…...

Phi-4-mini-reasoning vLLM模型服务化:gRPC接口与Protobuf定义详解

Phi-4-mini-reasoning vLLM模型服务化&#xff1a;gRPC接口与Protobuf定义详解 1. 模型概述 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理。作为Phi-4模型家族的一员&#xff0c;它特别针对数学推理能力进行了…...

华为eNSP实战:手把手教你用单臂路由打通不同VLAN,附排错命令清单

华为eNSP单臂路由实战&#xff1a;跨VLAN通信配置与深度排错指南 当企业网络规模扩大时&#xff0c;VLAN隔离是保障安全性和广播域控制的必要手段。但实际业务中&#xff0c;不同部门间的数据交互需求常常需要跨越VLAN边界。在华为认证体系HCIA和HCIP的实验环境中&#xff0c;单…...

Qwen3.5-9B训练复现:从SFT到RLHF的全流程开源实践指南

Qwen3.5-9B训练复现&#xff1a;从SFT到RLHF的全流程开源实践指南 1. 项目概述 Qwen3.5-9B是一个拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解&#xff08;图文输入&#xff09;和长上下文处理&#xff08;最…...

Python项目依赖管理:如何用pipreqs精准生成requirements.txt(附常见问题解决)

Python项目依赖管理实战&#xff1a;从pipreqs到高效协作的全链路优化 在Python项目开发中&#xff0c;依赖管理就像建筑的地基——它不显眼却决定了整个项目的稳定性。想象一下这样的场景&#xff1a;你花了三天时间调试一个诡异的问题&#xff0c;最后发现只是因为测试环境缺…...

告别穿模与漂移!南洋理工团队提出HMR新框架:用视觉大模型对齐人体姿态

点击下方卡片&#xff0c;关注「3D视觉工坊」公众号选择星标&#xff0c;干货第一时间送达本文一作投稿发布 | 来源&#xff1a;3D视觉工坊「3D视觉从入门到精通」知识星球(点开有惊喜) &#xff01;星球内有20多门3D视觉系统课程、300场顶会讲解、顶会论文最新解读、海量3D视觉…...

钉钉飞书为什么突然转向?Agent“终局”架构全解析(非常详细,看这篇就够了)

钉钉先出手 钉钉的动作更早&#xff0c;也更激进。 3 月 17 日阿里发布「悟空」平台时&#xff0c;钉钉 CTO 朱鸿说的是&#xff1a; “ 我们希望每一个 AI Agent&#xff0c;都能像调用系统命令一样自然地调用钉钉。 注意用词&#xff0c;「系统命令」&#xff0c;不是「API…...

头皮上也长痘痘,一梳头就碰到好痛怎么办?

很多人都有过头皮长痘的困扰&#xff0c;一梳头碰到就痛&#xff0c;别提多难受了。其实&#xff0c;头皮长痘和我们的健康息息相关&#xff0c;下面就来详细说说其中的原因和解决办法。痘痘成因大揭秘清洁不到位头皮和脸部皮肤一样&#xff0c;会分泌油脂。如果平时洗头不勤&a…...

2.3.插入排序——像打牌一样整理数组,为什么它对“几乎有序”数据特别友好?

2.3.插入排序——像打牌一样整理数组&#xff0c;为什么它对“几乎有序”数据特别友好&#xff1f; 系列&#xff1a;搜索与排序 | 第 3 篇&#xff0c;共 16 篇 难度&#xff1a;⭐☆☆☆☆ 入门级 标签&#xff1a;排序 插入排序 稳定排序 基础算法 小数据优化 上一篇&#x…...

电影票销售管理|基于springboot + vue电影票销售管理系统(源码+数据库+文档)

电影票销售管理系统 目录 基于springboot vue电影票销售管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue电影票销售管理系统 一、前言 博主…...