poj2159(排序题意难懂还是水题别看…

来源:互联网 发布:魔兽世界5.2数据库 编辑:程序博客网 时间:2024/05/01 17:10

http://poj.org/problem?id=2159

Ancient Cipher
Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 21680Accepted: 7351

Description

Ancient Roman empirehad a strong government system with various departments, includinga secret service department. Important documents were sent betweenprovinces and the capital in encrypted form to preventeavesdropping. The most popular ciphers in those times were socalled substitution cipher and permutation cipher.
Substitution cipher changes all occurrences of each letter to someother letter. Substitutes for all letters must be different. Forsome letters substitute letter may coincide with the originalletter. For example, applying substitution cipher that changes allletters from 'A' to 'Y' to the next ones in the alphabet, andchanges 'Z' to 'A', to the message "VICTORIOUS" one gets themessage "WJDUPSJPVT".
Permutation cipher applies some permutation to the letters of themessage. For example, applying the permutation <2,1, 5, 4, 3, 7, 6, 10, 9, 8> to the message"VICTORIOUS" one gets the message "IVOTCIRSUO".
It was quickly noticed that being applied separately, bothsubstitution cipher and permutation cipher were rather weak. Butwhen being combined, they were strong enough for those times. Thus,the most important messages were first encrypted using substitutioncipher, and then the result was encrypted using permutation cipher.Encrypting the message "VICTORIOUS" with the combination of theciphers described above one gets the message "JWPUDJSTVP".
Archeologists have recently found the message engraved on a stoneplate. At the first glance it seemed completely meaningless, so itwas suggested that the message was encrypted with some substitutionand permutation ciphers. They have conjectured the possible text ofthe original message that was encrypted, and now they want to checktheir conjecture. They need a computer program to do it, so youhave to write one.

Input

Input contains twolines. The first line contains the message engraved on the plate.Before encrypting, all spaces and punctuation marks were removed,so the encrypted message contains only capital letters of theEnglish alphabet. The second line contains the original messagethat is conjectured to be encrypted in the message on the firstline. It also contains only capital letters of the Englishalphabet.
The lengths of both lines of the input are equal and do not exceed100.

Output

Output "YES" if themessage on the first line of the input file could be the result ofencrypting the message on the second line, or "NO" in the othercase.

Sample Input

JWPUDJSTVPVICTORIOUS

Sample Output

YES

Source

Northeastern Europe 2004
ps:这题可以不要做,题意好难懂啊。。。读懂了就是一道水题。。看来很多解题报告才稍微懂点,吃饭的时候有想了想,终于弄懂了。。飘过
26个字母的加密过程是一个一对一的映射,只需要统计这两个字符串中各个字符出项的频率,然后分别对两个串各个字符按照出现的字符次数升序或者降序排序。如果排序后的频率数值对应相等,这输出YES,否则输出NO。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int c[30],d[30];
char a[110],b[110];
int main()
{
 while(scanf("%s",a)!=EOF)
 {
  scanf("%s",b);
  memset(c,0,sizeof(c));
  memset(d,0,sizeof(d));
  int lena=strlen(a);
  int lenb=strlen(b);
  int i;
  for(i=0;i<lena;i++)
   c[a[i]-'A']++;
  for(i=0;i<lenb;i++)
   d[b[i]-'A']++;
  sort(c,c+26);
  sort(d,d+26);
  for(i=0;i<26;i++)
  {
   if(c[i]!=d[i])
   {
    printf("NO\n");
    return0;
   }
  }
  printf("YES\n");
 }
 return 0;
}
原创粉丝点击