首页 > 其他分享 >[CSP-S 2023] 密码锁

[CSP-S 2023] 密码锁

时间:2024-08-08 13:53:32浏览次数:10  
标签:11 nn 锁车 转动 拨圈 2023 密码锁 CSP

题目描述

小 Y 有一把五个拨圈的密码锁。如图所示,每个拨圈上是从 00 到 99 的数字。每个拨圈都是从 00 到 99 的循环,即 99 拨动一个位置后可以变成 00 或 88,

因为校园里比较安全,小 Y 采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度仅转动一个拨圈或者同时转动两个相邻的拨圈。

当小 Y 选择同时转动两个相邻拨圈时,两个拨圈转动的幅度相同,即小 Y 可以将密码锁从 0  0  1  1  500115 转成 1  1  1  1  511115,但不会转成 1  2  1  1  512115。

时间久了,小 Y 也担心这么锁车的安全性,所以小 Y 记下了自己锁车后密码锁的 nn 个状态,注意这 nn 个状态都不是正确密码。

为了检验这么锁车的安全性,小 Y 有多少种可能的正确密码,使得每个正确密码都能够按照他所采用的锁车方式产生锁车后密码锁的全部 nn 个状态。

输入格式

输入的第一行包含一个正整数 nn,表示锁车后密码锁的状态数。

接下来 nn 行每行包含五个整数,表示一个密码锁的状态。

输出格式

输出一行包含一个整数,表示密码锁的这 nn 个状态按照给定的锁车方式能对应多少种正确密码。

样例 #1

样例输入 #1

1
0 0 1 1 5

Copy

样例输出 #1

81

Copy

提示

【样例 1 解释】

一共有 8181 种可能的方案。

其中转动一个拨圈的方案有 4545 种,转动两个拨圈的方案有 3636 种。

【样例 2】

见选手目录下的 lock/lock2.in 与 lock/lock2.ans。

【数据范围】

对于所有测试数据有:1≤n≤81≤n≤8。

测试点n≤n≤特殊性质
1∼31∼311
4∼54∼522
6∼86∼888A
9∼109∼10

特殊性质 A:保证所有正确密码都可以通过仅转动一个拨圈得到测试数据给出的 nn 个状态。

非官方数据

思路

能通过转动一个拨圈任意幅度,或者两个拨圈相同幅度,求能达到 n 个状态的可能正确的密码方案数。

注意到 n≤10,且拨圈只有五个,我们可以枚举转动幅度计数,最终状态是正确答案当且仅当它能通过 n 个状态转移而来。

 

#include<bits/stdc++.h>
using namespace std;
int n,aa,f[11][11][11][11][11],mod=10,a,b,c,d,e;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a>>b>>c>>d>>e;
		for(int j=1;j<=9;j++){
			f[(a+j)%mod][b][c][d][e]++;
			f[a][(b+j)%mod][c][d][e]++;
			f[a][b][(c+j)%mod][d][e]++;
			f[a][b][c][(d+j)%mod][e]++;
			f[a][b][c][d][(e+j)%mod]++;
			f[(a+j)%mod][(b+j)%mod][c][d][e]++;
			f[a][(b+j)%mod][(c+j)%mod][d][e]++;
			f[a][b][(c+j)%mod][(d+j)%mod][e]++;
			f[a][b][c][(d+j)%mod][(e+j)%mod]++;
		}
	}
	for(int i=0;i<=9;i++){
	    for(int j=0;j<=9;j++){
	        for(int k=0;k<=9;k++){
	            for(int u=0;u<=9;u++){
	                for(int v=0;v<=9;v++){
						if(f[i][j][k][u][v]==n) aa++;
					}
				}
			}
		}   
	}     
	cout<<aa;
	return 0;
}

标签:11,nn,锁车,转动,拨圈,2023,密码锁,CSP
From: https://blog.csdn.net/bz02_2023f2/article/details/141025135

相关文章

  • CSP初赛知识点讲解(二)
    CSP初赛知识点讲解(二)进制转换基本定义n进制转十进制十进制转n进制n进制转m进制小数的进制转换例题训练(四)进制转换基本定义十进制:逢十进一(包含数字0~9)(365......
  • CSP15
    T1唐了点击查看代码#include<bits/stdc++.h>#defineullunsignedlonglongusingnamespacestd;constintN=1E6+6;constullB=233;intlen;ullh[N],fh[N],p[N];ullget(intl,intr){ returnh[r]-h[l-1]*p[r-l+1];}ullfget(intl,intr){ inttl=len-......
  • 暑假集训CSP提高模拟15
    暑假集训CSP提高模拟15组题人:@LYinMX\(T1\)P213.串串\(15pts\)原题:luoguP5446[THUPC2018]绿绿和串串部分分\(15pts\):当\(|S|=1\)时输出\(1\),否则顺序输出\([2,|S|]\)。正解由题,有\(R\)一定是\(S\)的前缀。赛时在这里被绕进去,一直在想怎么证......
  • 「模拟赛」暑期集训CSP提高模拟14(8.6)
    A.BA100pts开场\(3min\)先打了个假做法向上取整求平均数,细看看到了一张饼一个单位时刻只能在一张烙板上这句话,重新想,困得要死,\(40min\)才做完。题意:现在有\(n\)块烙板,\(m\)张饼,第\(i\)张饼有\(a_i\)​个面。烙板一单位时刻可以烙熟一个面,一张饼一个单位时刻只......
  • 历年CSP-J初赛真题解析 | 2013年CSP-J初赛阅读程序(23-26)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;cout<<a<<"+"<<b<<......
  • 『模拟赛』暑假集训CSP提高模拟15
    Rank小寄一手A.串串原[THUPC2018]绿绿和串串一眼manacher,但是当时虚空了没搞懂,只打了暴力(还挂分了稍微学了一下,板子很短,主要依据是可以通过一个已经确定的与目前最长回文串的中心对称的半径来预先确定目标点最短的回文半径长度,从而优化复杂度达到线性。manacher主要......
  • node.js: mysql sequelize in WebStorm 2023.1
    mysql:select*fromtutorials;#CREATETABLEIFNOTEXISTS`tutorials`(`id`INTEGERNOTNULLauto_increment,`title`VARCHAR(255),`description`VARCHAR(255),`published`TINYINT(1),`createdAt`DATETIMENOTNULL,`updatedAt`DATETIMENOTNULL,PRIMA......
  • [赛记] 暑假集训CSP提高模拟15
    原题还是没找串串49pts用的$manacher$,板子差点没打对,但好歹还是打对了。。。赛时写的时候没有考虑到不用管偶回文,导致递归的时候有点问题。。。其实根本用不到递归,将循环顺序改为倒序即可;有三种情况:回文半径+位置能够到达右端点;显然,这种情况是合法的;既到不了左......
  • Java计算机毕业设计个人博客微信小程序演示录像220239(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,个人博客作为一种重要的网络表达和信息分享方式,逐渐从传统的PC端向移动端延伸。微信小程序作为一种轻量级......
  • 暑假集训CSP提高模拟15
    \[\color{red}{\huge囍挂111pts}\]叠词词恶心心T1串串一眼马拉车。我们来看看只翻转一次后就能得到答案的情况,就是如果某个位置的回文长度能到达这个字符串的末尾,那这个位置肯定能做翻转位置的,但是这种情况出现的位置只能在后半部分。如果是翻转多次的话,那么位置只能出现在......