抵御阿草(思维题)

这天在沙滩上晒着太阳的 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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值