Hidden Code

题目连接:

http://codeforces.com/gym/100015/attachments

Description

It’s time to put your hacking skills to the test! You’ve been called upon to help crack enemy codes in the

current war on... something or another. Anyway, the point is that you have discovered the encryption

technique used by the enemy; it is quite simple, and proceeds as follows. Note that all strings contain only

uppercase letters of the alphabet.

  1. We are given a key K and a plaintext P which is encrypted character-by-character to produce a

    ciphertext C of the same length.

  2. If |K| is the length of the key K,thenthefirst |K| characters of C are obtained by adding the first

    |K| characters of P to the characters of K, where adding two letters means interpreting them as

    numbers (A =0, B = 1, and so on) and taking the sum modulo 26. That is, Ci =(Pi +Ki)mod26for

    i =1,..., |K|.If |K| > |P|, then the extra characters in K are ignored.

  3. The remaining characters of P, i.e. Pi for i> |K|, are encrypted using the previous ciphertext

    characters by Ci =(Pi + Ci!|K|)mod26for i = |K| +1,..., |P|.

    +

    As an example, consider the encryption of the string “STANFORD” using the key “ACM”:

STA NFORD

+ACM SVMFA

SVM FAAWD

Knowing this, you are well on your way to being able to read the enemy’s communications. Luckily, you

also have several pairs of plaintexts and ciphertexts which your team recovered, all of which are known to

be encrypted with the same key. Help find the key that the enemy is using.

Input

The input consists of multiple test cases. Each test case begins with a line containing a single integer N,

1 ! N ! 100, the number of plaintext and ciphertext pairs you will receive. The next N lines each contain

two strings P and C, the plaintext and ciphertext, respectively. P and C will contain only uppercase letters

(A-Z) and have the same length (at most 100 characters). The input terminates with a line with N =0. For

example:

Output

For each test case, print a single line that contains the shortest possible key or “Impossible”(quotesadded

for clarity) if no possible key could have produced all of the encryptions. For example, the correct output

for the sample input above would be:

Sample Input

1

A B

3

STANFORD SVMFAAWD

AVOWIENR AXAWFEJW

VAMRI VCYMK

3

ABCDEFGHIJKLMNOPQRSTUVWXYZ AAAAAAAAAAAAAAAAAAAAAAAAAA

Y Y

Z Z

2

A B

B A

0

Sample Output

B

ACM

AZYXWVUTSRQPONMLKJIHGFEDCB

Impossible

Hint

题意

给你一个串A,然后给你一个key串,加密的B串就是A+key串得到的

如果key串太长的话,就直接把后面的无视掉就好了

如果key串太短的话,就让加密的串来填充后面的串就好了

现在给你串A和串B,你需要输出一个最短的key串

题解:

数据范围只有100

所以直接瞎暴力就好了

暴力枚举串的长度,然后再暴力check就好了

代码

#include<bits/stdc++.h>
using namespace std; int check(string s1,string s2,int len)
{
if(len>s1.size())return 1;
vector<int>A1,A2;
for(int i=0;i<s1.size();i++)
{
A1.push_back((int)(s1[i]-'A'));
A2.push_back((int)(s2[i]-'A'));
}
for(int i=0;i<s1.size()-len;i++)
if((A1[i+len]+A2[i])%26!=A2[i+len])
return 0;
return 1;
}
string code(string s1,string s2,int len)
{
vector<int>A1,A2;
for(int i=0;i<s1.size();i++)
{
A1.push_back((int)(s1[i]-'A'));
A2.push_back((int)(s2[i]-'A'));
}
string ans;
for(int i=0;i<min(len,(int)s1.size());i++)
{
int num = A2[i]-A1[i];
if(num<0)num+=26;
ans.push_back((char)(num+'A'));
}
return ans;
}
struct node
{
string pre,ne;
int len;
}now[200];
bool cmp(node A,node B)
{
return A.len>B.len;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
int len = 0;
for(int i=0;i<n;i++)
{
cin>>now[i].pre>>now[i].ne;
now[i].len = now[i].pre.size();
len = max(now[i].len,len);
}
sort(now,now+n,cmp);
int flag = 0;
for(int i=1;i<=len;i++)
{
int flag2 = 1;
for(int j=0;j<n;j++)
{
if(!check(now[j].pre,now[j].ne,i))
{
flag2 = 0;
break;
}
} if(flag2==0)
continue;
string dp = code(now[0].pre,now[0].ne,i);
for(int j=1;j<n;j++)
{
string ttt = code(now[j].pre,now[j].ne,i);
for(int k=0;k<ttt.size();k++)
{
if(ttt[k]!=dp[k])
{
flag2 = 0;
break;
}
}
if(flag2==0)
break;
}
if(flag2==0)
continue;
flag = 1;
cout<<dp<<endl;
break;
}
if(flag==0)printf("Impossible\n");
}
}

Codeforces Gym 100015H Hidden Code 暴力的更多相关文章

  1. Codeforces gym 100685 A. Ariel 暴力

    A. ArielTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/A Desc ...

  2. Codeforces Gym 100637G G. #TheDress 暴力

    G. #TheDress Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/G ...

  3. Codeforces Gym 100203G Good elements 暴力乱搞

    原题链接:http://codeforces.com/gym/100203/attachments/download/1702/statements.pdf 题解 考虑暴力的复杂度是O(n^3),所以 ...

  4. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  5. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  6. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  7. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  8. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】

     2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...

  9. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

随机推荐

  1. ajax给全局变量赋值问题

    ajax给全局变量赋值问题 今天在做项目时,遇到了一个问题.我用的是ajax,要在$.ajax({里面给一个全局变量赋值,结果死活赋值不上,纠结了好半天,后来上网查了查,才知道,ajax默认是异步请求 ...

  2. python中的深拷贝与浅拷贝

    深拷贝和浅拷贝 浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变. 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷 ...

  3. For循环List中删除正确的方式

    单线程public class Test { public static void main(String[] args) { ArrayList<Integer> list = new ...

  4. IT智力题

    题目1:你让工人为你工作7天,给工人的回报是一根金条.金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你 如何给你的工人付费? 答案:两次弄断就应分成三份,我把金条分 ...

  5. 初识---Qt解析XML文件(QDomDocument)

    关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析.QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?  DOM(Document Ob ...

  6. Iframe的应用以及父窗口和子窗口的相互访问

    点评:Iframe和FRAME的区别,方便大家以后在使用过程中根据实际需要取舍.- function getParentIFrameDocument(aID) { var rv = null; // ...

  7. Mapreduce执行过程分析(基于Hadoop2.4)——(三)

    4.4 Reduce类 4.4.1 Reduce介绍 整完了Map,接下来就是Reduce了.YarnChild.main()—>ReduceTask.run().ReduceTask.run方 ...

  8. pd虚拟机死机怎么解决

    最近在mac上使用pd虚拟机装win使用,今天发现pd中的win7虚拟机死机了,无论怎么点都没用,通过点击操作-关闭也不行,重启电脑也不行,后来找到一种办法可以重启虚拟机. 1.先通过菜单中止虚拟机, ...

  9. vim中大小写转化

    @(编程) gu或者gU 形象一点的解释就是小u意味着转为小写:大U意味着转为大写. 整篇文章大写转化为小写 打开文件后,无须进入命令行模式.键入: ggguG 解释一下: ggguG分作三段gg g ...

  10. js实现异步循环

    @(编程) 问题 实现异步循环时,你可能会遇到问题. 让我们试着写一个异步方法,每秒打印一次循环的索引值. for(var i = 0; i < 5; i++) { setTimeout(fun ...