[NOIp2009]潜伏者 题解「建议收藏」

[NOIp2009]潜伏者 题解「建议收藏」"题面"做法:模拟我们先定义三个char数组:a小C掌握的一条加密信息b加密信息所对应的原信息cR国司令部要求小C翻译的加密信息具体做法:1.读入(不讲)

大家好,又见面了,我是你们的朋友全栈君。

题面

做法:模拟


我们先定义三个char数组:
a -> 小 C掌握的一条加密信息
b -> 加密信息所对应的原信息
c -> R国司令部要求小C翻译的加密信息

具体做法:

  1. 读入(不讲)
  2. 一个特判:若输入a数组长度<=26,直接输出“Failed”,因为题目要求必须26个字母都需要有对应的字母
  3. for循环将a数组字符通过map映射与b数组对应字符建立联系,同时加一重判定,检查当前字符是否之前用过,字符是否与不同字符建立联系
  4. for循环查看26个字母是否都被赋值
  5. for循环将c数组字符对应到b数组并输出
  6. return 0

总时间复杂度:O(len(a+c))


具体见代码:

#include <bits/stdc++.h>

const int N = 100010; //题中没有要求,可自己随意开,但尽量开大些
using namespace std;

char a[N], b[N], c[N];
map <char, char> m;
map <char, char> check;

int main () {
	scanf ("%s%s%s", a, b, c);
	int len = strlen (a);
	if (len < 26) {
		cout << "Failed" << endl;
		return 0;
	}
	for (int i = 0; i < len; i++) {
		if (check[b[i]]) {//反向搜索,其中有一个点需要反过来查错
			if (check[b[i]] != a[i]) {
				cout << "Failed" << endl;
				return 0;
			}
		}
		if (m[a[i]]) {//正向搜索,没有反向可拿90pts
			if (m[a[i]] != b[i]) {
				cout << "Failed" << endl;
				return 0;
			}
		}
		else {
			m[a[i]] = b[i];
			check[b[i]] = a[i];
		}
	}
	for (int i = 1; i <= 26; i++) {//查看26个字母是否都被赋值
		if (!m[(char)(i+'A'-1)]) {
			cout << "Failed" << endl;
			return 0;
		}
	}
	len = strlen (c);
	for (int i = 0; i < len; i++) {//输出
		cout << m[c[i]];
	}
	cout << endl;
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155709.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php短信接口代码

    php短信接口代码

    2021年9月18日
    51
  • 虚拟存储技术和交换技术的区别是什么_虚拟存储器技术

    虚拟存储技术和交换技术的区别是什么_虚拟存储器技术虚拟存储技术和交换技术很像,乍一看都是换入换出,把暂时不需要用的数据换出内存,将需要用到的数据换入内存,从而实现逻辑上内存的扩充。二者之间的区别是,虚拟存储技术是在一个作业运行的过程中,将作业的数据进行换入换出。王道老师举得例子就是玩儿游戏。这儿换一个游戏,比如玩儿DOTA,停留在场景A的时候,场景B的数据不需要用到,所以不放在内存,转换到场景B的时候再把场景B的数据放入内存。而交换技术是内存紧张时,换出某些进程,腾出内存空间,换入其他进程。换而言之,交换技术是在不同的进程(作业)间的,虚拟存储技术是在一个

    2022年9月26日
    2
  • lazarus 中文教程_Delphi 项目转Lazarus 教程「建议收藏」

    lazarus 中文教程_Delphi 项目转Lazarus 教程「建议收藏」我的IDE是1.2.4先改成中文打开IDE->Ctrl+Shift+O->赛选器输入disk如下图配置好后点OK;工具栏->File->Restart重启IDE然后你有木有很亲切的感觉我也就认得几个单词,再多我就不认识它了.进入正题.把原有的Delphi项目转成lazarus下面我就不上图了上面上2张图就是为了下面不上图工具快捷键Alt+T-&…

    2022年6月23日
    62
  • ofbiz学习笔记

    ofbiz学习笔记

    2022年1月27日
    54
  • java程序日志管理

    java程序日志管理初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题。而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要业务逻辑和功能就好了。我当初刚入行的时候就有很长一段时间完全不用去关心日志,到后来偶尔涉及到的时候,也都是从其他地方采用cv大法直接搬用。不过,随着工作时间的变化,随着手头上任务重要程度的变化

    2022年6月10日
    26
  • python安装教程(Windows系统,python3.7为例)「建议收藏」

    python安装教程(Windows系统,python3.7为例)「建议收藏」1.在python的官网下载python对应版本:https://www.python.org/downloads/windows/    64位下载Windowsx86-64executableinstaller版本   32位下载Windowsx86executableinstaller版本   打开链接如下图,版本会一直更新,选择任意一个适合自己电脑的版本就好2…

    2022年6月18日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号