程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 百練 2820 古代密碼 解題報告

百練 2820 古代密碼 解題報告

編輯:C++入門知識

1.Link:http://poj.grids.cn/practice/2820/

2.content

總時間限制:
1000ms
內存限制:
65536kB
描述
古羅馬帝王有一個包括各種部門的強大政府組織。其中有一個部門就是保密服務部門。為了保險起見,在省與省之間傳遞的重要文件中的大寫字母是加密的。當時最流行的加密方法是替換和重新排列。
替換方法是將所有出現的字符替換成其它的字符。有些字符會碰巧替換成它自己。例如:替換規則可以是將'A' 到 'Y'替換成它的下一個字符,將'Z'替換成 'A',如果原詞是 "VICTORIOUS" 則它變成 "WJDUPSJPVT"。
排列方法改變原來單詞中字母的順序。例如:將順序 <2, 1, 5, 4, 3, 7, 6, 10, 9, 8> 應用到 "VICTORIOUS" 上,則得到"IVOTCIRSUO"。
人 們很快意識到單獨應用替換方法或排列方法,加密是很不保險的。但是如果結合這兩種方法,在當時就可以得到非常可靠的加密方法。所以,很多重要信息先使用替 換方法加密,再將加密的結果用排列的方法加密。用兩中方法結合就可以將"VICTORIOUS" 加密成"JWPUDJSTVP"。
考古學家最近在一個石台上發現了一些信息。初看起來它們毫無意義,所以有人設想它們可能是用替換和排列的方法被加密了。人們試著解讀了石台上的密碼,現在他們想檢查解讀的是否正確。他們需要一個計算機程序來驗證她,你的任務就是寫這個驗證程序。




輸入
輸入有兩行。第一行是石台上的文字。文字中沒有空格,並且只有大寫英文字母。第二行是被解讀出來的加密前的文字。第二行也是由大寫英文字母構成的。
兩行字符數目的長度都不超過計劃100。
輸出
如果第二行經過某種加密方法後可以產生第一行的信息,輸出 "YES",否則輸出"NO"。
樣例輸入
JWPUDJSTVP
VICTORIOUS
樣例輸出
YES

3.code

 #include <iostream>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
     NUM =   MAX 200
       
     
           res[     memset(res,,()*NUM*     
      str[     (i =  ; i < ; i++) cin>>     
     (i = ; i < ; i++           len =         (j = ; j < len; j++              res[i][(str[i][j]-)]++       
     (i = ; i < NUM; i++          (j = ; j < NUM; j++              (res[][i] == res[][j])           (j < NUM) res[][j] = -                (i < NUM) cout<<<<      cout<<<<     
       }

4.method

(1) statics the character num

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved