记录编号 298264 评测结果 AAAAAAAAAA
题目名称 [NOIP 2012]Vigenère密码 最终得分 100
用户昵称 Gravatar蜗牛哲 是否通过 通过
代码语言 C++ 运行时间 0.052 s
提交时间 2016-08-20 16:16:41 内存使用 0.25 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<climits>
  5. #include<cmath>
  6. #include<cstdlib>
  7. #include<cctype>
  8. #include<algorithm>
  9. #include<set>
  10. #include<deque>
  11. #include<queue>
  12. #include<string>
  13. #include<map>
  14. #include<stack>
  15. #include<sstream>
  16. #include<vector>
  17. using namespace std;
  18. //====================struct declaration=====================
  19.  
  20. //====================var declaration========================
  21. const int maxn=1000+10;
  22. char key[maxn],mi[maxn],ming[maxn];
  23. bool f[maxn];
  24.  
  25. int lenkey,lenmi;
  26. //====================function declaration===================
  27.  
  28. //====================main code==============================
  29. int main()
  30. {
  31. freopen("vigenere.in","r",stdin);
  32. freopen("vigenere.out","w",stdout);
  33. cin>>key;
  34. lenkey=strlen(key);
  35. cin>>mi;
  36. lenmi=strlen(mi);
  37. for(int i=0; i<lenkey; i++)
  38. {
  39. if(key[i]>='A' && key[i]<='Z')
  40. {
  41. key[i]+=32;
  42. }
  43. }
  44. for(int i=0; i<lenmi; i++)
  45. {
  46. if(mi[i]>='A' && mi[i]<='Z')
  47. {
  48. f[i]=true;
  49. mi[i]+=32;
  50. }
  51. }
  52. for(int i=lenkey; i<lenmi; i++)
  53. {
  54. key[i]=key[i%lenkey];
  55. }
  56. for(int i=0; i<lenmi; i++)
  57. {
  58. ming[i]=mi[i]-(key[i]-'a');
  59. if(ming[i]<'a')
  60. ming[i]+=26;
  61. }
  62. for(int i=0; i<lenmi; i++)
  63. {
  64. if(f[i])
  65. cout<<char(ming[i]-32);
  66. else
  67. cout<<ming[i];
  68. }
  69. cout<<endl;
  70. return 0;
  71. }