标签:长度 push ret 要求 大于等于 mes cin xor end
每条信息被编译为二进制数B,其长度为N然后该信息被写下N次,每次向右移动0,1,...K-1位。
如 B = 1001010, K= 4
1001010
1001010
1001010
1001010
这样的结果是1110100110 (S),要求实现解密过程。
解题思路: 当数组B长度大于等于3时,S的对应位置应该是由B本位的前3位异或计算组成的。
#include <iostream> #include <vector> #include <string> using namespace std; int cal_xor(vector<int> &a) { int _xor = a[a.size()-1] ^ a[a.size()-2]; cout << "a.size()-4:" << a.size()-1 << endl; cout << a[a.size()-1] << a[a.size()-2] << a[a.size()-3] << ‘,‘; int j = a.size()-2; cout << "a.size()-3:" << a.size()-4 << endl; /* for(; j >= a.size()-3; j--) cout << j << ","; // cout << a[j] << ","; }*/ /*for(unsigned int i = a.size()-2;i > a.size()-4; i--) { cout << i << ","; cout << a[i] << ","; _xor = _xor^a[i]; }*/ _xor = _xor ^ a[a.size()-3]; cout << "xor()" << _xor << endl; return _xor; } int main() { int N, K; cin >> N; cin >> K; string s; cin >> s; vector<int>s2; cout << "N:" << N << ",K:" << K << endl; cout << "s:" << s << endl; s2.push_back(s[s.size()-1]-‘0‘); cout << s2[0] << endl; int _xor = s2[0]; for (int i = s.size()-2; i > 0; i--) { //_xor = (s[i]-‘0‘) ^ _xor; // if(_xor == 0) { // s2.push_back() // } cout << s2.size() << "xor:" << _xor << endl; if(s[i]-‘0‘ ==0) { cout <<"s[i]" << s[i] << endl; s2.push_back(_xor); } else { cout <<"s[i]" << s[i] << endl; if(_xor ==0) { s2.push_back(1); } else{ s2.push_back(0); } } cout << "s2:" << s2.size() << endl; if(s2.size()>=3){ cout << "s2.size(): " << s2.size() <<endl;; for(int k = 0; k < s2.size(); k++) { cout << s2[k] << "," << endl; } _xor = cal_xor(s2); } else { _xor = _xor^(s2[s2.size()-1]); } if(s2.size()==N) { break; } } vector<int> result; for(int i = s2.size()-1; i >=0; i--) { //cout << s2[i] << ","; result.push_back(s2[i]); cout << s2[i] << ","; } }
标签:长度 push ret 要求 大于等于 mes cin xor end
原文地址:https://www.cnblogs.com/Shinered/p/11337016.html