题目传送门

题意:完全不懂,最后还是看题解才理解了。第一行字符串是密文变成明文的规则,比如第二个样例:“qwertyuiopasdfghjklzxcvbnm”,‘q'对应的明文为’a','w'对应'b'....... 第二行是密文+明文的形式,明文有密文转换来,但不完整,求原来最小的可能文本。

分析:将密文+明文都当做密文转成明文,那么转换后的字符串前缀密文的部分解密,和原来的字符串的后缀明文匹配,从原来字符串的后半部分和转换之后的字符串的开头开始匹配,得到的是明文(密文)的长度。详细解释

收获:题目读不懂多读几遍,再不行yy题意,想想会涉及什么算法

代码:

/************************************************
* Author :Running_Time
* Created Time :2015-8-24 19:42:24
* File Name :A.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
char ch[30], m[30], s[N], rs[N];
int fail[N]; void get_fail(char *P, int lenp) {
int i = 0, j = -1; fail[0] = -1;
while (i < lenp) {
if (j == -1 || P[j] == P[i]) {
i++; j++; fail[i] = j;
}
else j = fail[j];
}
} int KMP(char *T, char *P) {
int lent = strlen (T), lenp = strlen (P);
get_fail (P, lenp);
int i = 0, j = 0;
while (i < lent) {
while (j != -1 && T[i] != P[j]) j = fail[j];
i++; j++;
}
return j;
} int main(void) {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%s%s", &ch, &s);
for (int i=0; i<26; ++i) {
m[ch[i]-'a'] = 'a' + i;
}
int len = strlen (s);
for (int i=0; i<len; ++i) {
rs[i] = m[s[i]-'a'];
}
int k = KMP (s + (len + 1) / 2, rs);
for (int i=0; i<len-k; ++i) printf ("%c", s[i]);
for (int i=0; i<len-k; ++i) printf ("%c", rs[i]);
puts ("");
} return 0;
}

  

最新文章

  1. Javascript外部对象
  2. [ASP.NET MVC 小牛之路]11 - Filter
  3. (原创)Xilinx的ISE生成模块ngc网表文件
  4. CONTAINING_RECORD的实现
  5. 用java操作XML文件(DOM解析方式)
  6. Sonar+Hudson+Maven构建系列之三:安装Hudson
  7. ios开发——实用技术篇Swift篇&amp;播放MP3
  8. POJ_3068_Shortest_pair_of_paths_(最小费用流)
  9. C++创建动态链接库(*.dll)
  10. jQuery版推箱子游戏详解和源码
  11. awk中{print $1}什么意思
  12. CCF认证之——相反数
  13. python爬虫(7)——BeautifulSoup
  14. UE4代码片断备份
  15. Android JNI 学习(二):JNI 设计机制
  16. FTP服务器搭建与访问的相关问题
  17. 混合app开发--js和webview之间的交互总结
  18. 【规范】前端编码规范——html 规范
  19. 【CF480D】Parcels DP
  20. WebService与CXF

热门文章

  1. ASP.NET Core 奇淫技巧之动态WebApi
  2. Linux信号通讯编程
  3. 手机没Root?你照样可以渗透路由器
  4. sdk manager 创建的虚拟机启动的时候总是在Android字样解决
  5. Spring MVC @ResponseBody响应中文乱码
  6. Android多线程更新UI的方式
  7. Gson转换Json串为对象报java.lang.NoClassDefFoundError
  8. LDAP方式连接AD获取用户信息
  9. 7-39 Math对象
  10. AC自动机简明教程