[bzoj4956]Secret Chamber at Mount Rushmore floyd

Problem I. Secret Chamber at Mount Rushmore

你现在可能已经听说过Rushmore 山上有一个壮观的石雕刻画了四位著名的美国总统。然而,很少     
有人知道这个纪念雕刻暗藏一个秘密的房间。这听起来像是一部好莱坞电影的情节,但是这个房间是真    
实存在的。它藏在Abraham Lincoln 的头后面,它被设计成一个档案库,用来存放美国历史上重要的文      
件与文物。历史学家声称这个档案库的建造在1939 年被中断,直到20 世纪90 年代末才能被访问,但        
这不是全部的真相。                                                                                                                                                     
在1982 年,著名的考古学家S. Dakota Jones 秘密地访问了这座纪念雕刻,发现房间已经完成建         
造,但不对外公开。这似乎有些可疑,经过一些开凿,她发现一个隐藏的地下室和一些文件。不幸的是, 
这些文件没什么有效信息,都是很无聊的内容。她猜测这些内容被加密了,但是她费尽心机还是无法解     
密。                                                                                                                                                                                  
在这周的前些时候, Jones 博士在当地参加ACM-ICPC 世界总决赛,她终于在South Dakota                 
School of Mines and Technology 的Connolly Hall 发现了破译这些文件的密钥。她发现文件包含了一              
系列字母转换规则。一些字母可以经过多次转换,但一些字母没有转换规则。经过对那份无聊的文件中       
的单词多次转换之后,她似乎能把内容破译成美国历史上的文件,例如独立宣言和美国宪法。她需要你       
的帮助。                                                                                                                                                                           
你将得到字母可能的转换规则和一系列原始单词与解密单词。你的任务是验证每对单词是否匹配。       
如果两个单词具有相同的长度,且第一个单词的每个字母可以用转换规则多次转换后变成第二个单词中
对应位置的字母,则两个单词匹配。                                                                                                                            

Input
第一行包含两个整数m (1 m 500) 和n (1 n 50) ,其中m 表示字母转换规则的数量, n                                       
表示单词对的数量。                                                                                                                                                         
接下来m 行,每行包含两个不同的字母a 和b ,表示字母a 可以转换成字母b 。每个有序对(a; b)                       
只会出现至多一次。                                                                                                                                                         
接下来n 行,每行包含一对需要检查的单词。                                                                                                              
转换规则和单词只会使用小写字母'a' 到'z' ,且每个单词包含至少1 个字母,至多50 个字母。                          
Output
对于每对单词,如果两个单词可以匹配,输出yes ,否则输出no .                                                                             
Examples
standard input standard output

9 5
c t
i r
k p
o c
r o
t e
t f
u h
w p
we we
can the
work people
it of
out the


yes

no
no
yes
yes

standard input standard output
3 3
a c
b a
a b
aaa abc
abc aaa
acm bcm


yes

no
yes


吼水吼水的

#include<cstring>
#include<cstdio>
bool mp[305][305],flag;
int n,m; char s1[105],s2[105];
int main(){
	scanf("%d%d", &n, &m);
	for( int i = 1; i <= n; i++ ){
		char a[5],b[5];
		scanf("%s", a); scanf("%s", b);
		mp[a[0]-'a'][b[0]-'a'] = 1;
	}
	for( int i = 0; i <= 26; i++ ) mp[i][i] = 1;
	for( int k = 0; k <= 26; k++ )
		for( int i = 0; i <= 26; i++ )
			for( int j = 0; j <= 26; j++ )
				if( mp[i][k] && mp[k][j] ) mp[i][j] = 1;
	while(m--){
		flag = 0;
		scanf("%s", s1); scanf("%s", s2);
		int len1 = strlen(s1), len2 = strlen(s2);
		if( len1 ^ len2 ) { puts("no"); continue; }
		for( int i = 0; i < len1; i++ )
			if( !mp[s1[i]-'a'][s2[i]-'a'] ) { puts("no"); flag = 1; break; }
		if( !flag ) puts("yes");
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值