16世紀法國外交家blaise de vigenère設計了一種多表密碼加密演算法——vigenère密碼。vigenère密碼的加密解密演算法簡單易用,且破譯難度比較高,曾在美國南北戰爭中為南軍所廣泛使用。
在密碼學中,我們稱需要加密的資訊為明文,用m表示;稱加密後的資訊為密文,用c表示;而金鑰是一種引數,是將明文轉換為密文或將密文轉換為明文的演算法中輸入的資料,記為k。 在vigenère密碼中,金鑰k是乙個字母串,k=k1k2…kn。當明文m=m1m2…mn時,得到的密文c=c1c2…cn,其中ci=(mi-'a'+ki-'a')mod26+'a',運算?的規則如下表所示:
vigenere加密在操作時需要注意:
1. ?運算忽略參與運算的字母的大小寫,並保持字母在明文m中的大小寫形式;
2. 當明文m的長度大於金鑰k的長度時,將金鑰k重複使用。
輸入共2行。
第一行為乙個字串,表示金鑰k,長度不超過100,其中僅包含大小寫字母。第二行為乙個字串,表示經加密後的密文,長度不超過1000,其中僅包含大小寫字母。
輸出共1行,乙個字串,表示輸入金鑰和密文所對應的明文。
completevictoryyvqgpxaimmklongnzfwpvxmniytm
wherethereisawillthereisaway
每個測試點1s
對於100%的資料,輸入的金鑰的長度不超過100,輸入的密文的長度不超過1000,且都僅包含英文本母。
noip2012提高組複賽day1t1
啥都不說了 就是沒事寫到水題讓自己開心開心 o(∩_∩)o哈哈~
#include#include#include#include#include#include#include#include#include#include#include#define maxn 2037
using namespace std;
int lc;
int lk;
int sm[maxn];
int f[37][37];
string c;
string k;
string m;
string sc;
string sk;
inline string work(string a)
inline void solve()
{ for (int i=0;i<=25;i++)
for (int j=0;j<=25;j++)
f[i][j]=(i+j)%26;
cin>>k; sk=work(k); lk=sk.length();
cin>>c; sc=work(c); lc=sc.length();
for (;lk=97) sm[i]=sm[i]-'a'+'a';
for (int i=0;i
NOIP2012提高組 借教室
這個題目是個一眼題啊,維護一下一段區間內教室數的最小值,線段樹搞就可以了,lazy標記打一打,來乙個訂單先詢問再區間減,codevs上是可以過的,只不過嘛。debug大神。include include include include includeconst int maxn 1e6,maxnod...
NOIP 2012 提高組 借教室
在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量租借教室的資訊,我們自然希望程式設計解決這個問題。我們需要處理接下來n天的借教室資訊,其中第i天學校有ri個教室可供租借。共有m份訂單,...
NOIP2012提高組 疫情控制
noip2012 提高組 day2 試題。h 國有 n 個城市,這 n 個城市用 n 1 條雙向道路相互連通構成一棵樹,1 號城市是首都,也是樹中的根節點。h 國的首 都爆發了一種危害性極高的傳染病。當局為了控制疫情,不讓疫情擴散到邊境城市 葉子節點所表示的城市 決定動用軍隊在一些城市建立檢查點,使...