1 条题解

  • 0
    @ 2025-4-3 21:53:18

    拿下第一AC

    首先看到有人交了TLE,盲猜实是在模拟,但真的有必要吗?

    让我们不妨进行一下数学推导看题发呆:

    碰到一张正面朝上的牌,将它翻转后停止这次翻牌

    这说明如果要将一张正着的牌翻过来,其前面的牌一定是反面朝下的

    又因为一律从左往右翻牌,那么对于第i张牌,如果它是正的,无论其它牌怎么样,只要处于相同的位置,就有一个相同的次数a[i],代表将其反转所需的次数,那么答案就是所有a[i]之和


    举个栗子:对于"101001000",应进行以下处理(不会markdown,请脑补换行):

    101001000 ans=0 ↓ 001001000 ans+=a[1] ↓ 000001000 ans+=a[3] ↓ 000000000 ans+=a[6]

    ans=a[1]+a[3]+a[6]


    接下来推导a[i],手算可知,这是有规律的:

    a[i]=2^(i-1)


    但我们还可以再深入胡思乱想些

    其实到这里问题就解决了,有没有发现,这不就是二进制吗?把字符串倒序,其十进制的值就是答案 终于,最终代码出炉(请勿复制)——

    n=int(input())
    for _ in range(n):
        input()
        s=input()
        print(int(s[::-1],2))
    
  • 1

信息

ID
1111
时间
1000ms
内存
256MiB
难度
9
标签
(无)
递交数
23
已通过
2
上传者