POJ 2159 Ancient Cipher

//好不容易AC了……这些“水题”都是什么天外来客啊Orz

题目大意是古代密码。给出一段密文一段原文判断二者是否是对应的。

这题的坑,那可真是,太多了……

只要真正理解题意,这题就真是毫无技术含量的水题……可难也就难在题意上。被思维定势限制了。

密文是经过替代加密与调换顺序而成的。可是这替代不是所有字母统一平移。只要保证替代后仍然有一一对应关系即可。

统计两边的字母出现频率排序,比较相等就能解决。

奇葩的是我冒泡排序写反了测试了半天还没错误。呵呵= =

#include<stdio.h>
#include<string.h>
int main()
{
	int i,j,temp,flag=1,m[50],n[50];
	char text[200],code[200];
	memset(m,0,sizeof(m));
	memset(n,0,sizeof(n));
	scanf("%s",code);
	scanf("%s",text);
	for(i=0;i<strlen(text);i++)
		m[text[i]-'A']++;
	for(i=0;i<strlen(code);i++)
		n[code[i]-'A']++;
	for(i=0;i<30;i++)
		for(j=i+1;j<26;j++)
			if(m[i]<m[j])
			{
				temp=m[i];
				m[i]=m[j];
				m[j]=temp;
			}
	for(i=0;i<30;i++)
		for(j=i+1;j<26;j++)
			if(n[i]<n[j])
			{
				temp=n[i];
				n[i]=n[j];
				n[j]=temp;
			}
	for(i=0;i<30;i++)
		if(m[i]!=n[i])
			flag=0;
	if(flag)
		printf("YES");else
		printf("NO");
	return 0;
}

//~~~~(>_<)~~~~ 最后代码是在mad状态下改的,风格不太好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值