1 条题解

  • 1
    @ 2024-10-11 14:05:35

    思路

    当我们在某处空地发射弹球后,怪物受到攻击的顺序一定是左右或者右左交替,直到某一侧没有怪物时小球离开。

    所以要恰好消灭所有怪物,空地左右的怪物生命值之和相差为 0011 才可消灭怪物。

    只要枚举空地位置,看当前发射弹球位置 ii 能否消灭怪物即可,即 prei1pre0pre_{i-1}-pre_0prenpreipre_n-pre_{i} 的差值绝对值 d1d \le 1

    • d=0d=0 时,可以左右发射,贡献为 22
    • d=1d=1 时,只可以向一个方向发射,贡献为 11

    核心代码

    for (int i = 1; i <= n; i++) {
    	cin >> a[i];
    	pre[i] = pre[i - 1] + a[i];
    }
    for (int i = 1; i <= n; i++) {
    	if (a[i] == 0) {
    		ll suml = pre[i - 1] - pre[0];
    		ll sumr = pre[n] - pre[i];
    		if (suml == sumr) {
    			ans += 2;
    		}
    		if (abs(suml - sumr) == 1) {
    			ans++;
    		}
    	}
    }
    
    • 1

    信息

    ID
    21
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    124
    已通过
    27
    上传者