这天在沙滩上晒着太阳的 Eileen 发现阿草又一次来进攻枝江沙滩了,然而这一次没有一个魂的帮助, 胆小好色的 Eileen 只能寻求队长 Bella 的帮助。 Bella 发现此次进攻枝江沙滩的阿草一共有 2 n 只,它们站成了一排来进攻枝江沙滩,第 i 只阿草初 始有 ai = i 点美味度(i = 0, 1, . . . , 2 n − 1)。Bella 会使用她的铁棒横扫 n 次,每次横扫会将所有偶. 数. 位置 i 的阿草与位置 i + 1 的阿草合并成一只新阿草。新阿草的美味度 bi/2 = ai op ai+1,其中 op 是与、 或、异或中的一种运算。在同一次横扫中,对于所有的 i,op 是同一种操作。显然 Bella 每次横扫之后阿 草的数量就会减半。 当最后只剩下一只阿草的时候,吃货 Diana 会突然出现将其吃掉,Diana 想知道最后吃掉的阿草美 味度是多少。 由于阿草的美味度可能会很大,因此只需要输出最终阿草美味度的二进制表示。 输ޛṲᕅ 第一行包含一个正整数 n(0 ≤ n ≤ 105)。 n 不为 0 时,第二行包含一个长度为 n 的字符串,每个位置为 0, 1, 2,分别代表与、或、异或。 输出Ṳᕅ 输出一行一个字符串,为最终美味度的二进制表示。输出不应包含前导 0。 ṭׁ standard input standard output 2 10 1 3 012 100 ᨆ⽰ 对于样例一,合并的过程为: (0, 1, 2, 3) → (1, 3) → (1) 对于样例二,合并的过程为: (0, 1, 2, 3, 4, 5, 6, 7) → (0, 2, 4, 6) → (2, 6) → (4) 题面中的与、或、异或分别是按位与、按位或、按位异或。
题意:
第一行输一个数,你要求0~2的n次方-1。第二行给长度为n的字符串,仅含有012三种数字。0与,1或,2异或。其中,将i和第i+1根据上述输入的字符串求结果。
例:
2
10
1
过程: (0, 1, 2, 3) → (1, 3) → (1)
ac代码()
#include <iostream>
#include <cstring>
#include <string>
#include<algorithm>
#include<cmath>
using namespace std;
char s[100100];
int main() {
int n;
cin >> n;
int f = 0;
int m = 0;
int k = 0;
//cin >> s;
getchar();
for (int i = 0; i < n; i++) {
s[i] = getchar();
}
reverse(s, s + n);
for (int i = 0; i < n; i++) {
if (s[i] == '2') {
k++;
m = i;
}
}
if (k == 1) {
cout << "1";
for (int i = n - m; i > 1; i--) {
cout << "0";
}
return 0;
}
else if (k >= 2) {
cout << "0";
return 0;
}
for (int i = 0; i < n; i++) {
if (s[i] == '1') {
cout << "1";
f = 1;
}
else if (s[i] == '0') {
if (f == 0) {
continue;
}
cout << "0";
}
}
if (f == 0) {
cout << "0";
}
return 0;
}