noip2009提高组解题报告(c语言)

noip2009提高组解题报告(c语言)

ID:13201282

大小:79.00 KB

页数:10页

时间:2018-07-21

noip2009提高组解题报告(c语言)_第1页
noip2009提高组解题报告(c语言)_第2页
noip2009提高组解题报告(c语言)_第3页
noip2009提高组解题报告(c语言)_第4页
noip2009提高组解题报告(c语言)_第5页
资源描述:

《noip2009提高组解题报告(c语言)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.潜伏者(spy.pas/c/cpp)【问题描述】R国和S国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。历经艰险后,潜伏于S国的R国间谍小C终于摸清了S国军用密码的编码规则:1、   S国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所的内容均由大写字母‘A’—‘Z’构成(无空格等其他字母)。2、   S国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。3、   每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。

2、例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。现在,小C通过内线掌握了S国网络上发送的一条加密信息及其对应的原信息。小C希望能通过这条信息,破译S国的军用密码。小C的破译过程是这样的:扫描原信息,对于原信息中的字母x(代表任一大写字母),找到其在加密信息中的对应大写字母y,并认为在密码里y是x的密字。如此进行下去直到停止于如下的某个状态:1、   所有信息扫描完毕,‘A’—‘Z’所有26个字母在原信息中均出现过并获得了相应的“密字”。2、   所有信息扫描完毕,

3、但发现存在某个(或某些)字母在原信息中没有出现。3、   扫描中发现掌握的信息里有明显的自相矛盾或错误(违反S过密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。在小C忙得头昏脑胀之际,R国司令部又发来电报,要求他翻译另外一条从S国刚刚截取到的加密信息。现在请你帮助小C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。【输入】输入文件名为spy.in,共3行,每行为一个长度在1到100之间的字符串。第1行为小C掌握的一条加密信息。第2行为第1行的加密信息

4、所对应的原信息。第3行为R国司令部要求小C翻译的加密信息。输入数据保证所有字符串仅由大写字母‘A’—‘Z’构成,且第1行长度与第2行相等。【输出】输出文件spy.out共1行。若破译密码停止时出现2,3两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。否则请输出利用密码翻译电报中加密信息后得到的原信息。【输入输出样例1】spy.inspy.outAAABEOWIEFailed【输入输出样例1说明】原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。【输入输出样例2】spy.inspy.out

5、QWERTYUIOPLKJHGFDSAZXCVBNABCDEFGHIJKLMNOPQRSTUVWXYDSLIEWOFailed【输入输出样例2说明】字母‘Z’在原信息中没有出现,输出“Failed”。【输入输出样例3】spy.inspy.outMSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPPYIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLLFLSONOIP 【分析】注意每个限定条件就好了,小借哈希表存储,仅测试样例且通过。【程序

6、】#include#include"string.h"charstr[101];main(){     voiddeciphering(charstr1[],charstr2[]);     voidtrans(chardic[]);     FILE*in;     inti;     charstr1[101],str2[101],str3[101];     in=fopen("spy.in","r");     fscanf(in,"%s%s%s",str1,str2,str);     fclose(

7、in);     deciphering(str1,str2);     }     voiddeciphering(charstr1[],charstr2[]){    chartemp1[26]={},temp2[26]={};    FILE*out;    intn,ch,i;    n=strlen(str1);    for(i=0;i

8、f(str2[i]!=temp1[ch])break;    ch=str2[i]-65;    if(temp2[ch]=='')temp2[ch]=str1[i];    if(str1[i]!=temp2[ch])break;    }    for(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。