牛客小白月赛89(A~C)

小白赛怎么这么难打,是什么小白,我的世界小白吗

A. 伊甸之花

给你一个数组 a,问你是否找出一个 不等于 a 的数组 b,满足

其中数值都要在 [1,m] 的范围内

直接在 a 数组上修改,可以发现如果改了 a[1],a[2],那么 a[3] 也要一起修改,所以考虑两个极限情况,一个是全体加一,还有一个是全体减一。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int n,m;
    cin>>n>>m;

    int a[n+1];
    per(i,1,n)cin>>a[i];

    per(i,1,n)a[i]++;
    per(i,1,n){
        if(a[i]>m){
            per(j,1,n)a[j]-=2;
            per(j,1,n){
                if(a[j]<1){
                    cout<<"No"<<endl;
                    return;
                }
            }
        }
    }
    cout<<"Yes"<<endl;
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}

B. 显生之宙

如果是负数,我们希望所有数都加上他,这样最终最小值才会尽可能小。

如果是正数,那么留到最后求和。

考虑先排序,然后如果第一个是负数,就以差分的形式把值保留下来,然后求和。

#include <bits/stdc++.h>
#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

void solve(){
    int n,sum=0;
    cin>>n;

    int a[n+1];
    per(i,1,n)cin>>a[i],sum+=a[i];

    sort(a+1,a+1+n);

    if(a[1]>=0){
        cout<<sum<<endl;
    }else{
        int res=a[1],ans=0;
        per(i,2,n){
            a[i]+=res;
            if(a[i]<0)res+=a[i];//如果一直都小于0,那么最后答案就是差分的累计a[n]
            else ans+=a[i];//如果加了累计的负数还大于0,那么后面都是正数,最终答案为ans
        }

        if(ans)cout<<ans<<endl;
        else cout<<a[n]<<endl;
    }

}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    cin>>t;
    while(t--)solve();
    return 0;
}

C. 太阳之华

每次可以选择一个红色连通块向外感染(注意不是所有红色块)。

观察题目所给的数据范围

最差情况感染一次的复杂度是n*m,2e6,一共有100组数据点,总计2e8复杂度,即这题最多进行10次及以下的搜索次数,因此我们向博弈论的方向考虑。

红方先手,然后来回执行。

假设蓝方执行之后,红方再执行可以覆盖所有蓝色,显然不管在中间还是四个角落,只要有一个蓝色块往外延伸一次,就会平局,那么得出结论:

红方必须在一次操作之后覆盖所有蓝色块,否则就是平局。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;
const int N=2e3+5;

int n,m;
string s[N],news[N];

bool isok(int x,int y){
    return x>=1 and x<=n and y>=0 and y<=m-1;
}

int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

bool vis[N][N];

void dfs(int x,int y){
    if(vis[x][y])return;
    vis[x][y]=true;

    per(i,0,3){
        int nx=dx[i]+x,ny=dy[i]+y;
        if(isok(nx,ny) and !vis[nx][ny] and s[nx][ny]=='#')dfs(nx,ny);
        else if(isok(nx,ny) and s[nx][ny]=='.')news[nx][ny]='#';
    }
}

bool redGo(){
    per(i,1,n){
        per(j,0,m-1){//遍历所有的红色连通块,是否能从其中一个使得蓝色全部被覆盖
            if(s[i][j]=='#' and !vis[i][j]){
                per(k,1,n)news[k]=s[k];

                dfs(i,j);

                int blue=0;
                per(k,1,n){
                    per(l,0,m-1){
                        blue+=news[k][l]=='.';
                    }
                }

                if(blue==0)return true;
            }
        }
    }

    return false;
}

void solve(){
    cin>>n>>m;

    //#先手

    per(i,1,n)cin>>s[i];

    int red=0;
    per(i,1,n){
        per(j,0,m-1){
            red+=s[i][j]=='#';
        }
    }

    if(red==0){//特判初始状态
        cout<<"Blue"<<endl;
        return;
    }else if(red==n*m){
        cout<<"Red"<<endl;
        return;
    }

    per(i,1,n){//多组测试点初始化
        per(j,0,m-1)vis[i][j]=false;
    }

    if(redGo()){
        cout<<"Red"<<endl;
        return;
    }
    cout<<"Draw"<<endl;
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    cin>>t;
    while(t--)solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oh My Bug || PHPmyAdmin导入csv文件时,502报错

解决&#xff1a; 在宝塔面板文件配置中加入一下代码 location / { proxy_pass http://localhost:888; } location /backend-api { rewrite ^/backend-api(.*)$ $1 break; proxy_pass http://你的ip地址; }

DP:斐波那契数列模型

创作不易&#xff0c;感谢三连支持 &#xff01; 斐波那契数列用于一维探索的单峰函数之中&#xff0c;用于求解最优值的方法。其主要优势为&#xff0c;在第一次迭代的时候求解两个函数值&#xff0c;之后每次迭代只需求解一次 。 一、第N个泰波那契数 . - 力扣&#xff08;…

简介:iframe 沙箱+WebComponent 容器

前言 HTML 内联框架元素 (<iframe>) 表示嵌套的browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 每个嵌入的浏览上下文&#xff08;embedded browsing context&#xff09;都有自己的会话历史记录 (session history)和DOM 树。包含嵌入内容的浏览上下文称…

【史上最全面arduino esp32教程】SPI层次结构SPI协议与SPI控制器结构

文章目录 前言一、SPI 程序层次1.1 硬件原理图1.2 硬件框图1.3 软件层次 二、SPI协议2.1 硬件连线2.2 如何访问SPI设备2.3 SPI 框图 总结 前言 欢迎阅读本篇文章&#xff0c;将为您介绍Arduino ESP32上的SPI通信协议。SPI&#xff08;Serial Peripheral Interface&#xff09;…

Matlab快捷键与函数

注释&#xff1a;注释对于代码的重要性我们就不做过多的解释了。不做注释的代码不是好代码。选中要注释的语句&#xff0c;按快捷键CtrlR,或者在命令行窗口上面的注释地方可以进行注释。当然也可以直接在语句前面“%”就可以&#xff08;注意&#xff1a;一定要用英文符号&…

Matlab与高光谱遥感:环境监测的新时代

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

Windows10安装SSH

Linux运维工具-ywtool 目录 1. 打开设置2. 应用3.管理可选功能4.添加功能5.安装OpenSSH服务器6.测试是否安装成功 1. 打开设置 windows桌面按下"win l"键调出"设置"2. 应用 点击"应用"3.管理可选功能 点击"管理可选功能"4.添加功能…

定制红酒:品质与口感,双重保障

在葡萄酒的世界里&#xff0c;云仓酒庄的洒派定制红酒以其卓着的品质和迷人的口感&#xff0c;成为了无数品鉴者的心头好。这款红酒&#xff0c;不仅是对品质的追求&#xff0c;更是对生活的热爱和品味的体现。 云仓酒庄深知品质是红酒的灵魂&#xff0c;因此对洒派定制红酒的品…

SQL日期函数

文章目录 1.获取日期时间函数1.1 获取当前日期时间1.2 获取当前日期1.3 获取当前时间 2.日期格式化★★★2.1 日期转指定格式字符串2.2 字符串转日期 3.日期间隔3.1 增加日期间隔 ★★★3.2 减去一个时间间隔★★★3.3 日期相差天数&#xff08;天&#xff09;3.4 相差时间&…

【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}

文章目录 0.对于信号捕捉的理解1.信号处理的时机1.1 何时处理信号&#xff1f;1.2 内核态和用户态1.3 内核态和用户态的切换 2.了解寄存器3.信号捕捉的原理4.信号操作函数4.1sighandler_t signal(int signum, sighandler_t handler);4.2int sigaction(int signum, const struct…

网工内推 | 数通工程师,IE认证优先,五险一金,绩效奖

01 星网信通 招聘岗位&#xff1a;数通产品经理 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

Prometheus(四):VMware Vsphere监控及数据展示

目录 1 vmware exporter安装配置1.1 vmware exporter介绍1.2 安装 - 使用kubernetes部署1、下载2、修改配置文件3、执行安装4、查看 1.3 安装-使用docker的方式1.4 Prometheus配置1.5 Grafana配置&#xff08;模板页面还需要修改&#xff09; 总结 1 vmware exporter安装配置 …

快速将第三方私有协议视频源接入GB28181系统

一.管理平台与视频接入网关架构 视频监控中的各类视频源可能存在不同厂商&#xff0c;不同协议&#xff0c;不同版本的情况&#xff0c;那么如何将众多这样的视频源统一接入到标准的视频管理平台呢&#xff1f; 视跃的视频综合管理平台通过内置一个视频接入网关的模式&#xff…

虚拟机修改工具箱

虚拟机修改工具箱&#xff0c;内含各种虚拟机修改工具&#xff0c;过检测工具&#xff0c;显卡驱动等一系列虚拟机常用资源&#xff01; 上图 关注我&#xff0c;要下载地址&#xff01;

如何做时间管理?

前言 本篇是最近学习工作提效系列课程的第一篇&#xff0c;如何做时间管理&#xff1f;关于时间管理的内容老生常谈了&#xff0c;我自己之前也分享过针对时间管理的一些思考&#xff0c;比如 近期对「时间管理」的一些思考&#xff0c; 还有高效能人士的七个习惯的分享【读书…

MYSQL 同步到ES 如何设计架构保持一致性

简单使用某个组件很容易&#xff0c;但是一旦要搬到生产上就要考虑各种各样的异常&#xff0c;保证你方案的可靠性&#xff0c;可恢复性就是我们需要思考的问题。今天来聊聊我们部门在 MYSQL 同步到ES的方案设计。 在面对复杂条件查询时&#xff0c;MYSQL往往显得力不从心&…

总结Dubbo开源RPC框架

一、分布式系统 1.1 集群和分布式 集群&#xff1a;多个机器提供一样的服务&#xff08;实现高性能、高可用、 可伸缩、高可扩展 &#xff09; 分布式&#xff1a;多个机器提供不同的服务&#xff0c;合起来为一个大服务 1.2 架构 二、Dubbo dubbo是一个高性能、轻量级的开…

模拟B\S服务器(扩展知识点)

3.2 模拟B\S服务器(扩展知识点) 模拟网站服务器&#xff0c;使用浏览器访问自己编写的服务端程序&#xff0c;查看网页效果。 案例分析 准备页面数据&#xff0c;web文件夹。 复制到我们Module中&#xff0c;比如复制到day08中 我们模拟服务器端&#xff0c;ServerSocket类…

Linux环境JMeter脚本性能测试、easyNmon生成监控报告

一、下载JMeter安装包 Jmeter是Java开发的&#xff0c;需要依赖JDK环境&#xff0c;因此我们需提前安装好JDK。 Jmeter是开源的工具&#xff0c;我们直接到官网下载即可。 最新版本下载地址&#xff1a;Apache JMeter - Download Apache JMeter 二、安装JMeter #新建jmete…

关于Java对接网络验证+实践小例子,简单易懂

一个简单的网络验证小例子&#xff0c;各位大佬勿喷 突发奇想&#xff0c;如果一位A友找你拿一份 Working Fruits&#xff0c;但是你不想这位A友把你辛苦劳作、熬夜加点写出的代码分享他或她的另外一位朋友B友&#xff0c;也许并不是很有价值的一个小作业而已&#xff0c;但是就…