题解 CF1746A 【Maxmina】
大家好,我是 CQ-C2024 蒟蒻 CJH。
难度:入门。
标签:模拟,贪心。
题意
你有一个大小为 $n$ 的数组 $a$,只由 $0$ 和 $1$ 组成,还有一个整数 $k$。在一次操作中,你可以做以下其中一个。
-
选择 $a$ 中的 $2$ 个连续元素,替换为它们的最小值。
-
选择 $a$ 中的 $k$ 个连续元素,替换为它们的最大值。
判断是否有可能在几次(可能是 $0$)操作后将 $a$ 变成 $[1]$。
分析
因为题目只需要将 $a$ 留下 $1$,所以我们这里只需要把其它的所有数字都替换为最小值且仅留下至少 $1$ 个 $1$,将序列的长度变为 $k$ 后在取最大值。
这也就意味着 $a$ 中至少需要有 $1$,才能让 $a$ 变为 $1$。
所以我们只需要对输入的数字按位或来判断是否有 $1$,就可以了。
代码
//the code is from chenjh
#include<iostream>
#include<cstdio>
int main(){
int t,n,k;scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&k);
bool a,b=0;
for(int i=0;i<n;i++) std::cin>>a,b|=a;
//输入 0 或 1 后按位或。
puts(b?"YES":"NO");
}
return 0;
}
时间复杂度 $O(tn)$。
谢谢大家!

浙公网安备 33010602011771号