Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <cctype>
  5. #include <cstring>
  6. #include <ctime>
  7.  
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <vector>
  11. #include <deque>
  12. #include <list>
  13. #include <set>
  14. #include <map>
  15. #include <queue>
  16. #include <stack>
  17. #include <string>
  18.  
  19. using namespace std;
  20.  
  21. #define forn(i, n) for(int (i) = 0; (i) < (n); ++(i))
  22. #define mp make_pair
  23. #define vi vector<int>
  24. #define vvi vector<vector<int>>
  25. #define vvvi vector<vector<vector<int>>>
  26. #define pb push_back
  27. #define li long long
  28.  
  29. #define geta(_type, _x, _n)\
  30. vector<_type> _x(_n);\
  31. for (int _i = 0; _i < _n; ++_i)\
  32. cin >> _x[_i];
  33.  
  34. int check_r = 0;
  35. string rus, eng;
  36.  
  37. vector<char> tobites(char c)
  38. {
  39. vector<char> ans(8);
  40. int k = 7;
  41. int r = (int)c + 128;
  42. while (r > 0)
  43. {
  44. if (r % 2 != 0)
  45. ans[k]++;
  46. r /= 2;
  47. k--;
  48. }
  49. return ans;
  50. }
  51.  
  52. char tochar(vector<char> a)
  53. {
  54. char ans = -128;
  55. int k = 128;
  56. forn (i, 8)
  57. {
  58. if (a[i])
  59. ans += k;
  60. k /= 2;
  61. }
  62. return ans;
  63. }
  64.  
  65. void code(string & s, string & key)
  66. {
  67. forn (i, s.length())
  68. {
  69. vector<char> v1, v2, v3(8);
  70. v1 = tobites(s[i]);
  71. v2 = tobites(key[i]);
  72. forn (j, 8)
  73. if ((!v1[j] && v2[j]) || (v1[j] && !v2[j]))
  74. v3[j]++;
  75. s[i] = tochar(v3);
  76. }
  77. }
  78.  
  79. void decode(string & s, string & key)
  80. {
  81. forn (i, s.length())
  82. {
  83. vector<char> v1, v2, v3(8);
  84. v1 = tobites(s[i]);
  85. v2 = tobites(key[i]);
  86. forn (j, 8)
  87. v1[j] ? v3[j] = !v2[j] : v3[j] = v2[j];
  88. s[i] = tochar(v3);
  89. }
  90. }
  91.  
  92. int main()
  93. {
  94. #ifdef _DEBUG
  95. freopen("input.txt", "r", stdin);
  96. freopen("output.txt", "w", stdout);
  97. #endif
  98. string s, key;
  99.  
  100. for (char c = '!'; c <= '@'; c++)
  101. rus.pb(c), eng.pb(c);
  102. for (char c = 'a'; c <= 'z'; c++)
  103. eng.pb(c);
  104. for (char c = 'A'; c <= 'Z'; c++)
  105. eng.pb(c);
  106. for (char c = 'А'; c <= 'п'; c++)
  107. rus.pb(c);
  108. for (char c = 'р'; c <= 'я'; c++)
  109. rus.pb(c);
  110.  
  111. int val, a, c;
  112. cin >> val >> a >> c >> check_r >> s;
  113. key.resize(s.length());
  114. key[0] = ((char)val);
  115. for (int i = 1; i < s.length(); ++i)
  116. {
  117. if (check_r)
  118. {
  119. int j;
  120. for (j = 0; j < rus.length(); ++j)
  121. if (key[i - 1] == rus[j])
  122. break;
  123.  
  124. key[i] = rus[(a * j + c) % rus.length()];
  125. }
  126. else
  127. {
  128. int j;
  129. for (j = 0; j < eng.length(); ++j)
  130. if (key[i - 1] == eng[j])
  131. break;
  132.  
  133. key[i] = eng[(a * j + c) % eng.length()];
  134. }
  135. }
  136.  
  137. cout << "base str: " << s << endl << "key-str: " << key << endl << endl;
  138. code(s, key);
  139. cout << "code str: " << s << endl;
  140. decode(s, key);
  141. cout << "decode str: " << s << endl;
  142.  
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement