noip2009提高组解题报告(C语言).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
noip2009提高组解题报告(C语言)

1. 潜伏者 (spy.pas/c/cpp) 【问题描述】 R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。 历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则: 1、??? S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所的内容均由大写字母‘A’—‘Z’构成(无空格等其他字母)。 2、??? S国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。 3、??? 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。 ‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。 现在,小C通过内线掌握了S国网络上发送的一条加密信息及其对应的原信息。小C希望能通过这条信息,破译S国的军用密码。小C的破译过程是这样的:扫描原信息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y是x的密字。如此进行下去直到停止于如下的某个状态: 1、??? 所有信息扫描完毕,‘A’—‘Z’所有26个字母在原信息中均出现过并获得了相应的“密字”。 2、??? 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。 3、??? 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。 C忙得头昏脑胀之际,R国司令部又发来电报,要求他翻译另外一条从S国刚刚截取到的加密信息。现在请你帮助小C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。 【输入】 输入文件名为spy.in,共3行,每行为一个长度在1到100之间的字符串。 第1行为小C掌握的一条加密信息。 第2行为第1行的加密信息所对应的原信息。 第3行为R国司令部要求小C翻译的加密信息。 输入数据保证所有字符串仅由大写字母‘A’—‘Z’构成,且第1行长度与第2行相等。 【输出】 输出文件spy.out共1行。 若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。 否则请输出利用密码翻译电报中加密信息后得到的原信息。 【输入输出样例1】 spy.in spy.out AA AB EOWIE Failed 【输入输出样例1说明】 原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。 【输入输出样例2】 spy.in spy.out QWERTYUIOPLKJHGFDSAZXCVBN ABCDEFGHIJKLMNOPQRSTUVWXY DSLIEWO Failed 【输入输出样例2说明】 字母‘Z’在原信息中没有出现,输出“Failed”。 【输入输出样例3】 spy.in spy.out MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL FLSO NOIP ? 【分析】注意每个限定条件就好了,小借哈希表存储,仅测试样例且通过。 【程序】 #includestdio.h #includestring.h char str[101]; main() { ????? void deciphering(char str1[],char str2[]); ????? void trans(char dic[]); ????? FILE *in; ????? int i; ????? char str1[101],str2[101],str3[101]; ????? in=fopen(spy.in,r); ????? fscanf(in,%s%s%s,str1,str2,str); ????? fclose(in); ????? deciphering(str1,str2); ????? }????? void deciphering(char str1[],char str2[]) { ???? char temp1[26]={},temp2[26]={}; ???? FILE *out; ???? int n,ch,i; ???? n=strlen(str1); ???? for(i=0;in;i++) ???? { ???????????????????? ch=str1[i]-65; ???? if(temp1[ch]==\0) temp1[ch]=str2[i]; ???? if(str2[i]!=temp1[ch])break

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档