题目大意
求两个gray code的间距,gray code生成方式如下
gray_code[n][0...2^{n-1}-1]='0'+gray_code[n-1][0...2^{n-1}]
gray_code[n][2^{n-1}...2^{n}]='1'+gray_code[n-1][2^{n-1}...0]
简要题解
递归算每个gray code是第几个就好
#include <iostream> #include <string> using namespace std; using LL = long long; LL getPos(string t) { if (t.length() == 1) { return t[0] - '0'; } if (t[0] == '1') { return (1LL << t.length()) - getPos(t.substr(1, t.length())) - 1; } return getPos(t.substr(1, t.length())); } int main() { int n; cin >> n; string str; cin >> str; LL pos1 = getPos(str); cin >> str; LL pos2 = getPos(str); cout << pos2 - pos1 - 1 << endl; return 0; }