4.玛雅人的密码

news/2024/11/28 1:31:14/

玛雅人有一种密码,如果字符串中出现连续的 2012 四个数字就能解开密码。

给定一个长度为 N 的字符串,该字符串中只含有 0,1,2 三种数字。

可以对该字符串进行移位操作,每次操作可选取相邻的两个数字交换彼此位置。

请问这个字符串要移位几次才能解开密码。

例如 02120 经过一次移位,可以得到 20120,01220,02210,02102,其中 20120 符合要求,因此输出为 1。

如果无论移位多少次都解不开密码,输出 −1。

输入格式
第一行包含一个整数 N,表示字符串的长度。

第二行包含一个由 0,1,2 组成的,长度为 N 的字符串。

输出格式
若可以解出密码,则输出最少的移位次数;否则输出 −1。

数据范围
2≤N≤13
输入样例:
5
02120
输出样例:
1

BFS 模板题,只需要把字符串当作当前状态,交换相邻两个字符进入下一个状态,第一个找到带有2012的字符串就是移动次数最少的

#include<iostream>
#include<queue>
#include<unordered_map>
using namespace std;
int n;
string s;
unordered_map<string,int> cnt;//标识该字符串的移动次数
queue<string> q;
int bfs(string s)
{if(s.find("2012")!=string::npos) return 0;q.push(s);cnt[s]=0;while(!q.empty()){string t=q.front();q.pop();string s=t;for(int i=1; i<n; i++){swap(t[i],t[i-1]);if(!cnt.count(t))//判断是否已经搜索{cnt[t]=cnt[s]+1;//更新移动次数q.push(t);if(t.find("2012")!=string::npos) return cnt[t];}swap(t[i],t[i-1]);//恢复状态}}return -1;
}int main()
{cin>>n>>s;cout<<bfs(s);
}

http://www.ppmy.cn/news/190627.html

相关文章

玛雅文字

玛雅文字 **文件名&#xff1a;**mayan.in / mayan.out 题目描述 解读玛雅文字向来不简单&#xff0c;因为单词中的字母顺序可以是任意排列的。今天&#xff0c;科研团队找到了你来解决一个简化过的问题——在给定的一段玛雅文字 S 中&#xff0c;求出给定的单词 T 出现了几…

什么软件测试显示器响应时间准,一般人我不告诉他!显示器响应速度揭秘

前言&#xff1a;显示器的响应时间在2005年开始炒得比较热&#xff0c;到了8ms以下的时代&#xff0c;有一段时间没多少用户关心响应时间这个问题。最近&#xff0c;广角显示器风波再次刮起&#xff0c;低价广角显示器带来的好处是毋庸置疑的&#xff0c;但由于广角的结构原理问…

OpenJudge NOI 1.13 07:玛雅历

【题目链接】 OpenJudge NOI 1.13 07:玛雅历 【题目考点】 1. 数组 2. 取模运算 3. stl map 【解题思路】 输入Haab历的年月日&#xff0c;先确定该日期是从0年0月0日开始后的第几天&#xff0c;再转成Tzolkin历。 需要将Haab历的表示月份的字符串转为月份数0~18&#x…

【ACM】ACM练习——玛雅历

1.问题描述 玛雅历 Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 80876 Accepted: 24862 Description 上周末&#xff0c;M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳&#xff08;玛雅人用于记事的工具&#xff09;中&#xff0c;教授发现玛雅人…

Bailian2965 玛雅历【日期计算】

2965:玛雅历 总时间限制: 1000ms 内存限制: 65536kB 描述 上周末&#xff0c;M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳&#xff08;玛雅人用于记事的工具&#xff09;中&#xff0c;教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有…

gfoj1664 玛雅文字

题目&#xff1a;http://www.gdfzoj.com/oj/contest/469/problems/1 样例解释&#xff1a; 子串Acad、cadA是cAda的子串 看到样例很容易想到桶。。。但300000太大了&#xff0c;于是可以换个方法&#xff0c;比如多用一个桶 #include <cstdio> #include <algorithm&…

POJ1008:玛雅日历

一、Description During his last sabbatical, professor M. A. Ya made a surprising discovery about the old Maya calendar. From an old knotted message, professor discovered that the Maya civilization used a 365 day long year, called Haab, which had 19 months.…

2965:玛雅历

解题思路 1.分别用数组模拟Haab和Tzolkin 2.把给的输入&#xff0c;转化成离世界开始有多少天 3.计算Tzolkin AC代码 //计算输入的日子离世界开始的天数 days //年*365 yue*20 day //计算年份 year days / 260 days - year*260 // 计算月份 前面的数字num1 num day…