CSP-S 2023 密码锁

原文链接:CSP-S 真题第一讲:密码锁

说明:CSDN和公众号文章同步发布,需要第一时间收到最新内容,请关注公众号【比特正传】。

一、题目背景

题目来源:CSP-J 2023年 T2

题目考察点:模拟、枚举

题目链接:[CSP-S 2023] 密码锁 - 洛谷

题意:
旋转规则:1、只能旋转一次;2、只能旋转一个或相邻两个同一方向和同一幅度;

通过以上【旋转规则】可以得到题目给的n个状态,则为正确密码,求解正确密码的数量,

二、题目分析

本题密码锁共5位,每位10个取值,因此密码的总个数为10^{5},可以枚举出所有的密码的可能,然后check一下当前枚举的状态是否可能是正确密码,如果可能,cnt+1,否则忽略即可。

枚举很简单,用5层循环或者dfs搜索都可以,枚举出来后,如何check是不是正确密码呢?

题目提到旋转后的可能状态有n个,本题n<=8,所以可以遍历这n个状态,看是否可以用当前枚举状态A通过上面提到的【旋转规则】得到,再详细一点:对当前枚举状态和n个可能状态分别做差,得到的差数组sub,如果满足1️⃣全为0(如sub=[0,0,0,0,0]);2️⃣有一个非零,其他全为0(如sub=[0,0,3,0,0]);3️⃣两个连续相等的非零值,其他全为0(如sub=[0,2,2,0,0]);满足以上3个中的任意一个即可,如果都不满足,则一定为非正确密码。(如[1,0,1,0,0], [0,0,5,4,0], [1,2,1,5,0]等均为非正确的密码 )

三、AC code

结合代码回看上面的分析,更易消化

#include "bits/stdc++.h"
using namespace std;

const int N = 10;
int n, a[N][N], cnt = 0;
int cur[N], sub[N];

bool check() {
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=5; j++) {
			sub[j] = (cur[j]-a[i][j]+10) % 10;	
		}
		if(sub[1]==0 && sub[2]==0 && sub[3]==0 && sub[4]==0 && sub[5]==0) return false;  // 两个密码相等
		int unZero = 0;  // 两个密码对应位置不相等的个数
		for(int j=1; j<=5; j++) {
			if(sub[j] == 0) continue;
			unZero++;
			if(unZero >= 3) return false;  // 大于等于3,转一次肯定无法得到a[i],因此直接返回false
			if(unZero == 2) {
				if(sub[j-1] != sub[j]) return false;  // 两个不一样,但是这两个没有相连,也不行,返回false
			}
		}
	}
	
	return true;
}

void dfs(int idx) {
	if(idx == 6) {  //共5个密码位
		if(check()) cnt++;   // 此时枚举到了一个状态,check
		return;
	}
	for(int i=0; i<=9; i++) {
		cur[idx]= i;
		dfs(idx+1);
	}
}

int main() {
	cin >> n;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=5; j++) {
			cin >> a[i][j];
		}
	}
	dfs(1);  // 通过dfs搜索所有状态
	cout << cnt << endl;
}

#include "bits/stdc++.h"
using namespace std;
const int N = 10;
int n, a[N][N], cnt = 0;
int cur[N], sub[N];
bool check() {
  for(int i=1; i<=n; i++) {
    for(int j=1; j<=5; j++) {
      sub[j] = (cur[j]-a[i][j]+10) % 10;
    }
    if(sub[1]==0 && sub[2]==0 && sub[3]==0 && sub[4]==0 && sub[5]==0) return false;  // 两个密码相等
    int unZero = 0;  // 两个密码对应位置不相等的个数
    for(int j=1; j<=5; j++) {
      if(sub[j] == 0) continue;
      unZero++;
      if(unZero >= 3) return false;  // 大于等于3,转一次肯定无法得到a[i],因此直接返回false
      if(unZero == 2) {
        if(sub[j-1] != sub[j]) return false;  // 两个不一样,但是这两个没有相连,也不行,返回false
      }
    }
  }
  
  return true;
}

int main() {
  cin >> n;
  for(int i=1; i<=n; i++) {
    for(int j=1; j<=5; j++) {
      cin >> a[i][j];
    }
  }
  for(int i=0; i<10; i++) {
    cur[1] = i;
    for(int j=0; j<10; j++) {
      cur[2] = j;
      for(int k=0; k<10; k++) {
        cur[3] = k;
        for(int t=0; t<10; t++) {
          cur[4] = t;
          for(int x=0; x<10; x++) {
            cur[5] = x;
            if(check()) cnt++;
          }
        }
      }
    }
  }
  cout << cnt << endl;
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:梯度与导数~示例演绎《机器学习·神经网络》的高阶理解

这篇文章确实需要一定的数学基础&#xff0c;第一次接触的小伙伴可以先看一下我示例演绎这个主题的前两篇文章&#xff1a; 示例演绎机器学习中&#xff08;深度学习&#xff09;神经网络的数学基础——快速理解核心概念&#xff08;一&#xff09;&#xff1a; 政安晨&#…

选择影视行业创业的原因,影视从业者创业成功的秘密

一、教程描述 本套教程是面向影视从业者的创业教程&#xff0c;主讲人将把自己的创业经验、行业观察、成长心得分享给大家。如果你正在创业&#xff0c;这门课可以让你飞速成长、弯道超车。主讲人积累的行业经验&#xff0c;会让你比大多数同行站的更高&#xff0c;看的更宽。…

备战蓝桥杯---数学基础2

学了常见的筛法&#xff0c;让我们看个题&#xff1a; 首先&#xff0c;我们知道欧拉筛复杂度为nlognlogn,这题可以承受&#xff0c;但是空间上存不了&#xff0c;而如果我们枚举1--n^1/2&#xff0c;复杂度不允许。 其实在枚举的方法中&#xff0c;我们只需找出有无在【2&…

「递归算法」:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a…

爬虫系列-web请求全过程剖析

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 上一小节我们实现了一个网页的整体抓取工作&#xff0c;那么本小节&#xff0c;给各位好好剖析一下web请求的全部过程&#xff0c;这样有助于后面我们遇到的各种各样的网站就有了入手…

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常&#xff08;1&#xff09;观察现象&#xff08;2&#xff09;理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

【设计模式】23中设计模式笔记

设计模式分类 模板方法模式 核心就是设计一个部分抽象类。 这个类具有少量具体的方法&#xff0c;和大量抽象的方法&#xff0c;具体的方法是为外界提供服务的点&#xff0c;具体方法中定义了抽象方法的执行序列 装饰器模式 现在有一个对象A&#xff0c;希望A的a方法被修饰 …

离线场景下任意文档的在线预览及原样格式翻译,不依赖其他厂商接口非侵入式一行js代码实现网站的翻译及国际化,可配置使用多种翻译语言

离线场景下任意文档的在线预览及原样格式翻译&#xff0c;不依赖其他厂商接口非侵入式一行js代码实现网站的翻译及国际化&#xff0c;可配置使用多种翻译语言。 要实现翻译需要解决以下3个主要问题&#xff1a; 1&#xff09;from&#xff1a;内容本身的语言类型是什么&#xf…

Open CASCADE学习|扫掠

目录 1、BRepPrimAPI_MakePrism Draw Test Harness&#xff1a; C&#xff1a; 2、BRepPrimAPI_MakeRevol Draw Test Harness&#xff1a; C&#xff1a; 3、BRepOffsetAPI_MakePipeShell Draw Test Harness&#xff1a; C&#xff1a; Draw Test Harness&#xff1a;…

node.js+vue企业人事自动化办公oa系统c288a

采用B/S模式架构系统&#xff0c;开发简单&#xff0c;只需要连接网络即可登录本系统&#xff0c;不需要安装任何客户端。开发工具采用VSCode&#xff0c;前端采用VueElementUI&#xff0c;后端采用Node.js&#xff0c;数据库采用MySQL。 涉及的技术栈 1&#xff09; 前台页面…

小程序-云开发 获取用户的openid等信息

说明介绍&#xff1a; 小程序云开发功能来获取用户的openid。 一般在我们需要用到用户登录的时候&#xff0c;通常是需要获取微信小程序的openid的&#xff0c;由于微信的限制&#xff0c;一般我们只能通过后台去调微信的接口&#xff0c;来授权获取&#xff0c;增加了后端开发…

OnlyOffice-8.0版本深度测评

OnlyOffice 是一套全面的开源办公协作软件&#xff0c;不断演进的 OnlyOffice 8.0 版本为用户带来了一系列引人瞩目的新特性和功能改进。OnlyOffice 8.0 版本在功能丰富性、安全性和用户友好性上都有显著提升&#xff0c;为用户提供了更为强大、便捷和安全的文档处理和协作环境…

内网安全-内网穿透

目录 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 ssh代理内网穿透 ssh配置socket代理 MSF多级网络穿透 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 1、termite 之前叫ew &#xff08;可以进行正向连接&#xff0c;可以…

【深度学习】“智能皮肤:深度学习驱动的‘智慧之眼‘应用如何革新皮肤病诊疗未来“

在一个不久的未来世界&#xff0c;医疗科技取得了惊人的突破。一款名为“智慧之眼”的神秘应用横空出世&#xff0c;它如同科幻小说中的神器&#xff0c;能够通过摄像头扫描皮肤病变&#xff0c;并借助深度学习技术迅速得出专业级别的诊断结果。这个革新性的故事始于一场科研马…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言快捷栏绘制UI代码控制快捷列表信息 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中&#xff0c;我们将探索如何制作…

Java异常处理 throw和throws

目录 throwthrows实例制造异常 在Java中&#xff0c;throw和throws关键字都与异常处理有关&#xff0c;但它们的使用方式和目的有所不同。 throw throw关键字&#xff1a; * throw用于在代码中显式地抛出一个异常。你可以使用它来触发一个异常&#xff0c;并指定异常的类型。…

FPGA_简单工程_VGA显示驱动器

一 理论 使用640*48060显示模式&#xff0c;将数字信号转换位模拟信号&#xff0c;经由VGA进行显示。 使用3GM723&#xff0c;3路高清视频编码芯片。 3GM7123编码芯片&#xff1a; 该芯片的主要功能是将RGB888的颜色数据转换成模拟的电压信号&#xff0c;然后进入到VGA接口的…

STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)

频率变小&#xff0c;周期变长 1&#xff0c;参考链接&#xff08;重要&#xff09; STM32CubeMX——定时器之定时功能&#xff08;学习使用timer定时器的设置&#xff09; STM32测量PWM信息&#xff08;学习使用设置pwm输入捕获&#xff09; 通用定时器中两个重要参数的设置心…

吹响AI PC号角!微软在Windows中不断增加“Copilot含量”

2024&#xff0c;会是AI PC元年吗&#xff1f;至少微软正在往这个方向努力。 本周&#xff0c;微软开始在Windows中测试Copilot的“新体验”&#xff0c;其中包括任务栏中的Copilot图标&#xff0c;当用户复制文本或图片时&#xff0c;Copilot操作菜单就会自动出现。 有媒体在…

《CSS 简易速速上手小册》第5章:CSS 动画与过渡(2024 最新版)

文章目录 5.1 CSS 过渡基础&#xff1a;网页的微妙舞步5.1.1 基础知识5.1.2 重点案例&#xff1a;按钮悬停效果5.1.3 拓展案例 1&#xff1a;渐变显示导航菜单5.1.4 拓展案例 2&#xff1a;动态调整元素大小 5.2 关键帧动画&#xff1a;编排你的网页芭蕾5.2.1 基础知识5.2.2 重…