快快编程题目第1005题怎么做

题意非常的简单给我们一个数,让我们把这个数所有位上的数加起来得到的和通过英文把每一位读出来。

这题需要注意的是N的范围是10^100所以我们不能通过int,甚至是long long来讀入这里我们应该按照字符串进行读入。

}

这题没想到最后居然能够做出来。。

这题用了两次DP先从前往后求一次异或的,再从后往前求一次与运算的分别是

1:求异或的时候,定义二维数组huo[]前者指第几位,后者是哈希的思想若huo[x][y]=2则表示最右边的数为第x位时,异或值为y的出现了两次需要再定义一个hash数组,来保存前面出现的所有情况再找囿多少位的时候,用hash数组中出现的所有的值与当前的第x位的数字进行异或

2:求与的时候,定义二维数组yu[]同异或的差不多,不过这里的位数是指从这位往后的所有的情况而异或的是指必须包含该位。由于与运算本身就是求的所有的情况不用再定义hash数组。

3:然后从前往後开始匹配只要用huo[x]与yu[x+1]进行匹配就好了。如果两者出现了相同的异或值那就将次数相乘。最终的答案即是正确答案

注意;在运算的过程中数组里的数会出现爆long long的情况。所以需要每一步都要求余。(因为这个而错了好几次。)

}

我要回帖

更多关于 编程题目 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信