標籤:
資訊交換
(message.cpp)
【題目描述】
Byteland戰火又起,農夫John派他的奶牛潛入敵國擷取情報資訊。
Cow曆盡千辛萬苦終於將敵國的編碼規則總結如下:
1 編碼是由大寫字母組成的字串。
2 設定了密字。加密的過程就是把原資訊的字母替換成對應密字。
3 一個字母有且僅有一個對應密字,不同字母對應不同密字。
如今,Cow終於擷取了敵國發送的一條加密資訊和對應的原資訊。Cow如下破解密碼:掃描原資訊,對於原資訊中的字母x,找到它在加密資訊中的對應大寫字母y,且認為y是x的密字。
Cow的工作停止於以下情況:
1 資訊掃描完畢且沒有差錯
2 掃描完畢但有字母沒有在原資訊中出現。
3 掃描中出現矛盾或錯誤,即違反上述的規則。
現在,John發來資訊,要求Cow利用破譯的密字翻譯一條剛剛截獲的敵國資訊。
【檔案格式】
輸入檔案:
第一行為Cow知道的一條加密資訊。
第二行為加密資訊的原資訊。
第三行為John要求Cow翻譯的加密資訊。
輸出檔案:
一行,如果出現2 3 所示的停止情況則輸出“Failed”,否則翻譯John傳送的資訊。
【範例資料】
#1
Input
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
Output
Failed
#2
Input
QWERTYUIOPLKJHGFDSAZXCVBNM
ABCDEFGHIJKLMNOPQRSTUVWXYZ
IQHPOQKGHU
Output
HANJIALONG
這道題直接上map映射就可以了
下面上資料:
map的基本操作函數:
C++ Maps是一種關聯式容器,包含“關鍵字/值”對
begin() 返回指向map頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現的次數
empty() 如果map為空白則返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊條目的迭代器對
erase() 刪除一個元素
find() 尋找一個元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函數
lower_bound() 返回索引值>=給定元素的第一個位置
max_size() 返回可以容納的最大元素個數
rbegin() 返回一個指向map尾部的逆向迭代器
rend() 返回一個指向map頭部的逆向迭代器
size() 返回map中元素的個數
swap() 交換兩個map
upper_bound() 返回索引值>給定元素的第一個位置
value_comp() 返回比較元素value的函數
這道題的代碼:
1 #include<iostream> 2 #include<cstdio> 3 #include<map> 4 #include<string> 5 6 using namespace std; 7 8 map<char,char> bianma; 9 10 string a,b,c;11 int cishu=0;12 13 int main()14 {15 freopen("message.in","r",stdin);16 freopen("message.out","w",stdout);17 cin>>a>>b>>c;18 for(int i=0;i < a.length(); i++)19 {20 if(bianma.count(a[i]))21 {22 if(bianma[a[i]]!=b[i])23 {24 cout<<"Failed";25 return 0;26 }27 }28 else29 {30 cishu++;31 bianma[a[i]]=b[i];32 }33 }34 if(cishu!=26)35 {36 cout<<"Failed";37 return 0;38 }39 for(int i=0;i<=c.length();i++)40 {41 c[i]=bianma[c[i]];42 }43 cout<<c;44 return 0;45 }
(本代碼原題能過9個點)
map——映射(message.cpp)