题解 CF1746A 【Maxmina】

大家好,我是 CQ-C2024 蒟蒻 CJH。

难度:入门。

标签:模拟,贪心。

题意

你有一个大小为 n 的数组 a,只由 01 组成,还有一个整数 k。在一次操作中,你可以做以下其中一个。

  • 选择 a 中的 2 个连续元素,替换为它们的最小值。

  • 选择 a 中的 k 个连续元素,替换为它们的最大值。

判断是否有可能在几次(可能是 0)操作后将 a 变成 [1]

分析

因为题目只需要将 a 留下 1,所以我们这里只需要把其它的所有数字都替换为最小值且仅留下至少 11,将序列的长度变为 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)

谢谢大家!

posted @   Chen_Jinhui  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

一言

美好的事情,现在才开始呐。
——Clannad
点击右上角即可分享
微信分享提示