蓝桥杯小白打卡第二天

789. 数的范围

题目描述

给定一个按照升序排列的长度为 n n n 的整数数组,以及 q q q 个查询。

对于每个查询,返回一个元素 k k k 的起始位置和终止位置(位置从 0 0 0 开始计数)。

如果数组中不存在该元素,则返回 − 1 − 1 -1 -1 11

输入格式

  • 第一行包含整数 n n n q q q,表示数组长度和询问个数。
  • 第二行包含 n n n 个整数(均在 1 ∼ 10000 1\sim10000 110000 范围内),表示完整数组。
  • 接下来 q q q 行,每行包含一个整数 k k k,表示一个询问元素。

输出格式

q q q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。

如果数组中不存在该元素,则返回 − 1 − 1 -1 -1 11

数据范围

  • 1 ≤ n ≤ 100000 1\leq n\leq100000 1n100000
  • 1 ≤ q ≤ 10000 1\leq q\leq10000 1q10000
  • 1 ≤ k ≤ 10000 1\leq k\leq10000 1k10000

输入样例

6 3
1 2 2 3 3 4
3
4
5

输出样例

3 4
5 5
-1 -1

题目解释

首先,面对2分的问题,我们要先找到作用的区间。本道题目的区间为左区间为0,右区间为N-1。随后,我们需要找到一个可以用来划分区间的条件。在这里,我们让mid值大于等于X,从左向右得到满足条件的最后一个值,从而得到大于或等于S值的区间的左端点。随后,我们在此基础之上再次进行二分,L值即为刚才所得的左端点,R值为原先的N-1。随后,我们根据mid的值小于等于X,从左向右得到满足条件的最后一个点,从而得到结果

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int N=1e5+10;
int n,q,a[N];int main(){cin>>n>>q;for(int i=0;i<n;i++) scanf("%d",&a[i]);//输入while(q--){int x;cin>>x;int l=0,r=n-1;while(l<r){int mid=l+r>>1;if(a[mid]>=x) r=mid;//从右边向左,得到满足条件的最后一个else l=mid+1;}//得到大于或等于x值的区间的左端点if(a[l]==x){cout<<l<<" ";r=n-1;//回复现场while(l<r){//在之前判断的基础之上再进行计算,减少了次数int mid=l+r+1>>1;if(a[mid]<=x) l=mid;else r=mid-1;}cout<<r<<endl;}else cout<<-1<<" "<<-1<<endl;}return 0;
}

95. 费解的开关

游戏规则

  1. 灯的布局:有25盏灯排成一个5×5的方形,每盏灯都有一个开关,游戏者可改变其状态。
  2. 操作及连锁反应:每一步,游戏者改变某一个灯的状态,与之上下左右相邻的灯也要相应地改变状态。我们用数字1表示一盏开着的灯,用数字0表示关着的灯。例如,对于状态:
10111
01101
10111
10000
11011

改变最左上角的灯的状态后将变成:

01111
11101
11011
10000
11011

再改变正中间的灯后状态将变成:

01111
11001
11001
10100
11011

任务要求

  1. 输入格式
    • 第一行输入正整数n,代表数据中共有n个待解决的游戏初始状态。
    • 以下若干行数据分为n组,每组数据有5行,每行5个字符。每组数据描述了一个游戏的初始状态。各组数据间用一个空行分隔。
  2. 输出格式
    • 一共输出n行数据,每行有一个小于等于6的整数,它表示对于输入数据中对应的游戏状态最少需要几步才能使所有灯变亮。
    • 对于某一个游戏初始状态,若6步以内无法使所有灯变亮,则输出-1
  3. 数据范围0 < n ≤ 500

输入输出样例

  1. 输入样例
3
00111
01011
10001
11010
1110011101
11101
11110
11111
1111101111
11111
11111
11111
11111
  1. 输出样例
3
2
-1

题目思路

首先要明白每一行(除去第一行)的灯的亮灭可以从下一行的灯的亮灭来决定,针对第一行,每一盏灯都可以选择是否按下开关,所以这是一个指数型枚举的问题(指数型枚举是指从n个不同元素中,不考虑元素之间的顺序,将所有可能的子集都列举出来的过程。),随后第一行每个开关都可以选择是否打开,所以对于每一个问题我们是有2^5=32种情况,对于每一种情况我们的第一行都是不同的开关选择,对应着唯一的下面行(除去最后一行)的开关选择,到了最后一行,如果依然存在没有被点亮的灯,那么则认为这个题目无法被满足

代码1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;
const int N=6;
int g[N][N],backup[N][N];//由于每一个题目都对应着32种情况(32刚好满足32个不同的5位二进制数字),所以我们要提前做一个备份int dx[5]={0,0,-1,0,1},dy[5]={0,1,0,-1,0};// 翻转(x, y)位置的灯及其周围四个灯的状态
void turn(int x, int y) {for (int i = 0; i < 5; i++) {int nx = x + dx[i], ny = y + dy[i];if (nx >= 0 && nx < 5 && ny >= 0 && ny < 5) {g[nx][ny] ^= 1; // 使用异或操作来翻转状态}}
}int main(){int n;//一种有n种需要被解决的问题cin>>n;while(n--){for(int i=0;i<5;i++){for(int j=0;j<5;j++){scanf("%1d",&g[i][j]);//特别注意这个地方是1d,因为题目所给数字是链接在一起的,所以需要用1d来用来区分,当然这个地方也可以使用char数组}}//完成输入//接下来进行第一行的开关,对于这一个待解决的问题,有32种情况,那么我们在最开始先设置一个答案值为6,将这个值与每一种情况所得结果进行对比,取最小值int ans=7;for(int i=0;i<32;i++){//按照5位二进制数,进行每一种情况//情况一://首先完成备份int res=0;//创建一个临时存储的变量,该变量为局部变量,必须赋值memcpy(backup,g,sizeof g);for(int j=0;j<5;j++){if((i>>j)&1==1){turn(0,4-j);res++;}//如果这一位&的结果为1,那么就要进行开关的转换}//完成第一行开关for(int h=0;h<4;h++){for(int l=0;l<5;l++){if(g[h][l]==0){turn(h+1,l);res++;} }//遍历除去最后一行的所有,如果发现为0,则在下一行的该位置打开开关}//接下来要对结果进行检验,如果最后一行依然存在为0的情况,那么就证明无法满足题目条件bool flag=true;for(int l=0;l<5;l++){if(g[4][l]==0) flag=false;}if(flag) ans=min(ans,res);//如果可以,就把两个值中的最小值赋给ans//最后要回复现场memcpy(g,backup,sizeof g);}//完成了所有32种情况的遍历if(ans>6) cout<<"-1"<<endl;else cout<<ans<<endl;}return 0;
}

代码2(区别在于读取数据的方式不同,同时也是y总代码)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 6;char g[N][N], backup[N][N];
int dx[5] = {-1, 0, 1, 0, 0}, dy[5] = {0, 1, 0, -1, 0};void turn(int x, int y)
{for (int i = 0; i < 5; i ++ ){int a = x + dx[i], b = y + dy[i];if (a < 0 || a >= 5 || b < 0 || b >= 5) continue;   // 在边界外,直接忽略即可g[a][b] ^= 1;}
}int main()
{int T;cin >> T;while (T -- ){for (int i = 0; i < 5; i ++ ) cin >> g[i];int res = 10;for (int op = 0; op < 32; op ++ ){memcpy(backup, g, sizeof g);int step = 0;for (int i = 0; i < 5; i ++ )if (op >> i & 1){step ++ ;turn(0, i);}for (int i = 0; i < 4; i ++ )for (int j = 0; j < 5; j ++ )if (g[i][j] == '0'){step ++ ;turn(i + 1, j);}bool dark = false;for (int i = 0; i < 5; i ++ )if (g[4][i] == '0'){dark = true;break;}if (!dark) res = min(res, step);memcpy(g, backup, sizeof g);}if (res > 6) res = -1;cout << res << endl;}return 0;
}

1208. 翻硬币

问题描述

小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

例如,可能情形是:**oo***oooo。如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作。

输入格式

两行等长的字符串,分别表示初始状态和要达到的目标状态。

输出格式

一个整数,表示最小操作步数。

数据范围

输入字符串的长度均不超过 100。数据保证答案一定有解。

输入输出样例

输入样例 1

**********
o****o****

输出样例 1

5

输入样例 2

*o**o***o***
*o***o**o***

输出样例 2

1

题目思路

和上一个题目费解的开关类似,都是改变一个的值,同时会改动其他的值
请添加图片描述
是费解的开关的简易版

题目代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N=110;
char o[N],a[N];
int ans;void turn(int x){if(o[x]=='*') o[x]='o';else o[x]='*';
}int main(){cin>>o>>a;//接受起始状态和目标状态int len=strlen(o);for(int i=0;i<len-1;i++){if(o[i]==a[i]) continue;turn(i),turn(i+1);ans++;}if(a[len-1]==o[len-1]) cout<<ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue WebSocket简单应用 ws

webSocket应用 <template><div></div> </template><script> import { getToken } from "/utils/auth"; export default {data() {return {url: "",Socket: null, //socket对象lockReconnect: false, //锁定拒绝重连close: …

【Elasticsearch】terms聚合误差问题

Elasticsearch中的聚合查询在某些情况下确实可能存在误差&#xff0c;尤其是在处理分布式数据和大量唯一值时。这种误差主要来源于以下几个方面&#xff1a; 1.分片数据的局部性 Elasticsearch的索引通常被分成多个分片&#xff0c;每个分片独立地计算聚合结果。由于数据在分…

电脑可以自己换显卡吗?怎么操作

电脑是否可以自己换显卡主要取决于电脑的类型&#xff08;台式机或笔记本&#xff09;以及电脑的硬件配置。以下是对这一问题的详细解答及操作步骤&#xff1a; 一、判断电脑是否支持更换显卡 台式机&#xff1a;大多数台式电脑都支持更换显卡。只要主板上有PCIe插槽&#xff…

element-plus+vue3前端如何根据name进行搜索查到符合条件的数据

界面如图&#xff0c;下面的区域是接口给的所有的&#xff0c;希望前端根据输入的内容自己去匹配。 我是使用的element-plusvue3ts的写法。 <el-input v-model"filters.region" placeholder"输入区域搜索" keyup"filterRegion(filters.region)&q…

从离散傅里叶变换(DFT)到快速傅里叶变换(FFT)

摘要 离散傅里叶变换&#xff08;DFT&#xff09;是数字信号处理领域中分析信号频域特性的重要工具&#xff0c;但直接计算DFT的复杂度较高&#xff0c;限制了其在大规模数据处理中的应用。快速傅里叶变换&#xff08;FFT&#xff09;的出现显著降低了计算复杂度&#xff0c;极…

Oracle常用响应文件介绍(19c)

文章目录 1. 数据库安装响应文件1.1 响应文件模板1.2 参数说明1.2.1 响应文件版本参数1.2.2 安装选项参数1.2.3 Unix 用户组参数1.2.4 软件清单参数1.2.5 安装目录参数1.2.6 安装版本参数1.2.7 特权操作权限组指定参数1.2.8 Root脚本执行配置参数1.2.9 Grid选项配置参数1.2.10 …

【3分钟极速部署】在本地快速部署deepseek

第一步&#xff0c;找到网站&#xff0c;下载&#xff1a; 首先找到Ollama &#xff0c; 根据自己的电脑下载对应的版本 。 我个人用的是Windows 我就先尝试用Windows版本了 &#xff0c;文件不是很大&#xff0c;下载也比较的快 第二部就是安装了 &#xff1a; 安装完成后提示…

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

一、创建Vite项目 使用Vite初始化一个VueTypeScript项目&#xff1a; npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…

Zookeeper入门部署(单点与集群)

本篇文章基于docker方式部署zookeeper集群&#xff0c;请先安装docker 目录 1. docker初期准备 2.启动zookeeper 2.1 单点部署 2.2 集群部署 3. Linux脚本实现快速切换启动关闭 1. docker初期准备 拉取zookeeper镜像 docker pull zookeeper:3.5.6 如果拉取时间过长&#xf…

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏&#xff0c;我仍选择为机械键盘嵌入摇杆模块&#xff0c;这本质上是对"操作连续性"的执着。   值得深思的是&#xff0c;本次开发过程中借助DeepSeek的代码生成与逻辑推理&#xff0c;其展现的能力已然颠覆传统编程范式&#xff0c;需求描述可自动…

Qt的QTableWidget类的声明定义和使用

QTableWidget类的声明定义 QTableWidget 是 Qt 框架中的一个类&#xff0c;它继承自 QAbstractItemView 并提供了用于显示和操作二维表格数据的接口。这个类不是由用户直接声明的&#xff0c;而是由 Qt 库提供的。你可以在你的 Qt 应用程序中通过包含相应的头文件来使用它。 …

Linux里的容器被OOM killed的两种情况

生产上遇到过几次容器实例被OOM的现象&#xff0c;总结一下LInux OOM的两种触发条件。我的虚拟机是ubuntu 24.0.4版本&#xff0c;分配4G内存&#xff0c;在我的虚拟机上复现这两种case。 一 宿主机物理内存不够 当linux上所有应用程序的内存需求加起来超出了物理内存&#x…

使用Express.js和SQLite3构建简单TODO应用的后端API

使用Express.js和SQLite3构建简单TODO应用的后端API 引言环境准备代码解析1. 导入必要的模块2. 创建Express应用实例3. 设置数据库连接4. 初始化数据库表5. 配置中间件6. 定义数据接口7. 定义路由7.1 获取所有TODO项7.2 创建TODO项7.3 更新TODO项7.4 删除TODO项 8. 启动服务器 …

Windows本地部署DeepSeek-R1大模型并使用web界面远程交互

文章目录 前言1. 安装Ollama2. 安装DeepSeek-r1模型3. 安装图形化界面3.1 Windows系统安装Docker3.2 Docker部署Open WebUI3.3 添加Deepseek模型 4. 安装内网穿透工具5. 配置固定公网地址 前言 最近爆火的国产AI大模型Deepseek详细大家都不陌生&#xff0c;不过除了在手机上安…

低代码开发与传统开发:未来的技术路线选择

在科技飞速发展的当下&#xff0c;软件开发技术日新月异&#xff0c;低代码开发与传统开发作为两种重要的开发模式&#xff0c;正站在未来技术路线选择的十字路口&#xff0c;引发了众多企业和开发者的关注。它们各自有着独特的优势和适用场景&#xff0c;究竟该如何抉择&#…

二、0-1搭建springboot+vue3前后端分离-登录页面

项目仓库地址&#xff1a;zgw-admin: 从0-1搭建一个springbootvue3的项目&#xff0c;这是源码 本次主要是为了&#xff1a; a.写登录页面 b.element plus组件是否能正常使用 c.页面调用ts是否正常&#xff0c;无参和有参的函数 首页的图片&#xff1a; 页面效果 1、引入…

《翻转组件库之发布》

背景 继《翻转组件库之打包》_杨晓风-linda的博客-CSDN博客之后&#xff0c;组件库已经可以正常构建&#xff0c;那如何像elementUI等组件库那样&#xff0c;用npm安装&#xff0c;按照既定的用法使用即可呢&#xff1f;本篇便为你揭晓 资料相关 1、npm官方文档&#xff1a;…

Spring Task之Cron表达式

&#x1f31f; Spring Task高能预警&#xff1a;你以为的Cron表达式可能都是错的&#xff01;【附实战避坑指南】 开篇暴击&#xff1a;为什么你的定时任务总在凌晨3点翻车&#xff1f; “明明设置了0 0 2 * * ?&#xff0c;为什么任务每天凌晨3点执行&#xff1f;” —— 来…

web-JSON Web Token-CTFHub

前言 在众多的CTF平台当中&#xff0c;作者认为CTFHub对于初学者来说&#xff0c;是入门平台的不二之选。CTFHub通过自己独特的技能树模块&#xff0c;可以帮助初学者来快速入门。具体请看官方介绍&#xff1a;CTFHub。 作者更新了CTFHub系列&#xff0c;希望小伙伴们多多支持…

如何在 Kafka 中实现自定义分区器

今天我来给大家分享一下如何在 Kafka 中实现一个自定义分区器。Kafka 是一个分布式流处理平台&#xff0c;能够高效地处理海量数据。默认情况下&#xff0c;Kafka 使用键的哈希值来决定消息应该发送到哪个分区&#xff0c;但是有时我们需要根据特定的业务逻辑来定制分区策略。这…