[COCI2014-2015#2] MOBITEL 题解

发布时间 2023-07-04 10:46:15作者: Ruan_ji

题目大意

有一只蚂蚱,它把手机掉到了水坑里。然后它把手机捞出来,发现手机键盘都坏了。


那么手机没有坏之前就是介个样子的:
image
我们想打字的话就需要按下相应的数字键。比如说我们想打出 "a" ,就需要按一下数字键 1 。又比如说我们想打出 "f" ,就要摁三下 3 。

  • 补充1:当然,现在数字键 1 和数字键 0 都是没有用的。
  • 补充2:如果我们想打出 "ab",那我们应该怎么摁呢?难道是摁三下 2 ?这样显然有歧义。所以我们应该在摁下一次 1 之后摁下 "#" 再摁两下 1 。就是这样 "1#11"。

蚂蚱的手机不是被泡坏了嘛,所以各个键起的作用就不一样了。比如说摁下了 3 就相当于摁下了 2 ,所有的按键的作用都被换了一下。

在按键 3 和按键 2 的作用互换的情况下,想打出 "ab", 就得 "3#33"。

这个时候,蚂蚱想给自己的女朋友发信息(马勒戈壁的,蚂蚱都有npy了我倒是被我npy绿了,我要杀了蚂蚱!!!) 好,它现在不会发了,然后就来请求你。你要输出它怎么按键才能发送蚂蚱给出的消息。

思路

本人叙事能力堪忧,所以题目bb了很久,不好意思~

我们不得不做的一个任务就是把各个数字键对应的字母们都存进来,好,有了这样一个初始化,我们看到输入,直接把对应的数字键的字母copy过来,第一步完成了。看一下代码理解一下。

//这个是初始化
s[1] = "   ";  s[2] = "abc"; s[3] = "def";
s[4] = "ghi";  s[5] = "jkl"; s[6] = "mno";
s[7] = "pqrs"; s[8] = "tuv"; s[9] = "wxyz";

//键盘坏了,改变
for (int i = 1; i <= 9; ++i)
    cin >> n[i];
	
for (int i = 1; i <= 9; ++i) 
    c[i] = s[ n[i] ];

第二步,我们直接暴力枚举蚂蚱要打的每一个字,然后在所有的键盘里找,找到了,就输出。然后跟前面的比较一下,如果一样就先输出一个 "#" 。