JZOJsenior1395.2017.04.08【NOIP提高组】模拟赛B组 T1字符串还原
来源:互联网 发布:windows 安全配置指南 编辑:程序博客网 时间:2024/05/21 09:32
Description
【问题背景】
小K是一位蔚蓝教主的崇拜者(Orz教主er),有一天,他收到了一封匿名信,信告诉了小K由于他表现出色,得到了一次当面Orz教主的机会,但是要当面Orz教主可不那么容易,不是每个人都有资格Orz教主的……所以要破解下面一段密文才可以得到相关的信息,信中有提供加密的规则,但是小K觉得这个问题看似复杂,所以想请你帮忙……
【问题描述】
一个长度为n的由小写字母组成的字符串s1s2…sn按如下方式加密成3种形式:
1、 将字符串翻转,即si与sn-i+1对换。
2、 将字符串中每个字母变为其之后第k个字母,定义z之后的字母为a,0≤k≤6且未知。
3、 将字符串中每个字母变为其之前第k个字母,定义a之前的字母为z,k同2。
例如字符串abcd按上面3种方式加密后,在k=1的情况下为:1、dcba;2、bcde;3、zabc。
现给出信中按以上3种形式分别加密后的3个字符串(不一定按以上顺序),要求还原原来的字符串,并输出告诉小K。
Input
输入文件的第1行为一个整数n,表示这个字符串的长度。
下面3行每行3个长度为n的字符串,且保证符合题目要求。
Output
输出文件仅包括1行,为还原后的字符串。
Sample Input
4
zabc
dcba
bcde
Sample Output
abcd
Data Constraint
Hint
【数据规模】
对于10%的数据,输入给出加密字符串的顺序同题目中1、2、3的顺序。
对于20%的数据,n≤5;
对于40%的数据,n≤10;
对于60%的数据,n≤255;
对于100%的数据,n≤10000。
思路:
做这题比较容易实现(只有三个串)
我好奇如果多给几个串(1000左右)会怎么样
一种实现方法:
先把s1,s2,s3三个串中的s1反转过来
此时若:
if (ord(s2[i])+ord(s3[i])-2*ord(s1[i]))mod 26<>0 then exit(false);
可以试试手算一下这个,是正确的
那么剩下的就很简单了
代码:
type arr=array[0..10000]of longint;var s1,s2,s3:ansistring; n,i:longint;procedure doit(var x:ansistring);var i:longint; t:char;begin for i:=1 to n div 2 do begin t:=x[i]; x[i]:=x[n-i+1]; x[n-i+1]:=t; end;end;function judge(s1,s2,s3:ansistring):boolean;var i:longint;begin doit(s1); for i:=1 to n do if (ord(s2[i])+ord(s3[i])-2*ord(s1[i]))mod 26<>0 then exit(false); exit(true);end;begin readln(n); readln(s1); readln(s2); readln(s3); if judge(s1,s2,s3)then begin doit(s1); writeln(s1); halt; end; if judge(s2,s1,s3)then begin doit(s2); writeln(s2); halt; end; if judge(s3,s2,s1)then begin doit(s3); writeln(s3); end;end.
- JZOJsenior1395.2017.04.08【NOIP提高组】模拟赛B组 T1字符串还原
- 2017.3.18【NOIP提高组】模拟赛B组 T1:人类基因组
- 2017.07.08【NOIP提高组】模拟赛B组
- 2017.07.08【NOIP提高组】模拟赛B组小结
- 2017.08.08【NOIP提高组】模拟赛B组
- 2017.08.08【NOIP提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组 T1:偷懒的小X
- 2017.1.15【初中部 NOIP提高组】模拟赛B组 重复字符串(powerstr) 题解
- JZOJsenior1396.2017.04.08【NOIP提高组】模拟赛B组 T2包裹快递
- 2017.1.15【初中部 NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组
- 2017.3.18【NOIP提高组】模拟赛B组小结
- 2017.05.06【NOIP提高组】模拟赛B组
- 2017.06.24【NOIP提高组】模拟赛B组
- 2017.7.6总结【NOIP提高组】模拟赛B组
- 2017.07.06【NOIP提高组】模拟赛B组
- 2017.07.06【NOIP提高组】模拟赛B组小结
- bzoj 1854 并查集
- 同网段和不同网段设备通信原理详解
- GCC的符号可见性——解决多个库同名符号冲突问题
- 关于java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.Att
- Struts2中对数据简单的验证和property标签的用法
- JZOJsenior1395.2017.04.08【NOIP提高组】模拟赛B组 T1字符串还原
- sql trick
- 【KB2999226】api-ms-win-crt-runtime-l1-1-0.dll 丢失解决办法
- Java并发编程笔记
- 【hdu 1213 基础并查集】How Many Tables
- hdu5423 Rikka with Tree
- JavaScript : 零基础打造自己的类库
- 编译链接的过程
- mysql基本操作