Codeforces Round 915(Div.2) A~C(D,E更新中...)

news2024/11/29 4:40:48

A.Constructive Problems(思维)

题意:

给出一个 n × m n \times m n×m的网格,你需要将网格上所有点均填满水,当一个格子同时满足以下两个条件时,格子中也会被填满水:

  1. 该格子的左边或右边已经被填满水了

  2. 该格子的上面或下面已经被填满水了

一次操作可以给一个格子填满水,问至少几次操作才能将所有网格填满。

分析:

分析样例后可以发现,对于一个 n × m n \times m n×m的网格,每行/列均只需要包含一个被填满水的格子就能保证所有格子中均被水覆盖,即答案为 m a x ( n , m ) max(n, m) max(n,m)

填充方案如下图:

代码:

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, m;
    cin >> n >> m;
    cout << max(n, m) << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

B.Begginer’s Zelda(思维)

题意:

给出一棵树,你可以继续若干次以下操作:

  • 选择两个点 u u u v v v

  • 然后将 u u u v v v之间的所有点删除(包括 u , v u,v u,v),然后添加一个新的点代替原本的所有点,并连接原本所有点连着的边。

问至少需要多少次操作,才能使树上只剩下一个节点?

分析:

观察样例后可以发现,每次选择两个不同链上的叶节点,删除他们到达根节点的边,此时,由于叶节点所在的链被删除了,那么删除后不会产生新的叶节点,即树上的叶节点数量会减少 2 2 2(当树上至少还包含 4 4 4个叶节点时,如果树上只包含 3 3 3个叶节点,不难发现删除后只会减少一个叶节点)。

那么,如果总叶结点数量为 k k k,将叶节点删除到只剩 2 2 2需要的次数为 ⌊ ( k − 1 ) / 2 ⌋ \lfloor(k - 1) / 2\rfloor ⌊(k1)/2,然后,只剩两个叶节点的树实际上就是一条链,此时再进行一次操作就能将树变为一个节点,因此,答案为 ⌊ ( k − 1 ) / 2 + 1 ⌋ = ⌊ ( k + 1 ) / 2 ⌋ \lfloor(k - 1) / 2 + 1\rfloor = \lfloor(k + 1) / 2\rfloor ⌊(k1)/2+1=⌊(k+1)/2

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5e2;

int n, ans;
vector<int> G[N];

void dfs(int root, int pre) {
    int len = G[root].size();
    if (len == 1) ans++;
    for (int i = 0; i < len; i++) {
        int v = G[root][i];
        if (v == pre) continue;
        dfs(v, root);
    }
}

void solve() {
    cin >> n;
    for (int i = 1; i <= n; i++) G[i].clear();
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    ans = 0;
    dfs(1, -1);
    cout << (ans + 1) / 2 << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

C.Largest Subsequence(贪心)

题意:

给出一个长度为 n n n的字符串 s s s,字符串中仅包含小写字母,你可以进行若干次以下操作:

  • 选择字符串 s s s中的字典序最大的子序列 t t t,并将该子序列向右旋转一次,即将 t 1 t 2 . . . t m t_1t_2...t_m t1t2...tm变为 t m t 1 t 2 . . . t m − 1 t_mt_1t_2...t_{m - 1} tmt1t2...tm1

问:最少操作几次可以使得该字符串被排序成增序,如果无法完成排序,输出 − 1 -1 1.

分析:

不难发现,由于每次右移相当于在子序列中将最后的元素删除,那么操作后子序列仍然是字典序最大的,实际上能进行操作的始终是同一个字符串。

那么,只需要对该子序列进行排序,然后检查字符串排序后整个字符串 s s s是否有序,如果有序,输出操作前字典序最大的子序列中包含的所有字符数量减去最大字符的数量(排序执行到最大元素到最后位置就结束了,因此该子序列中所有最大的元素是不需要操作次数的)。

否则,输出 − 1 -1 1

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5e2;

vector<int> V[30];

void solve() {
    int n;
    string s;
    cin >> n >> s;
    for (int i = 0; i < 26; i++) V[i].clear();
    for (int i = 0; i < n; i++) {
        V[s[i] - 'a'].push_back(i);
    }
    int start_pos = -1, cnt = 0;
    vector<int> p;
    for (int i = 25; i >= 0; i--) {
        int pos = lower_bound(V[i].begin(), V[i].end(), start_pos) - V[i].begin();
        int len = V[i].size();
        if (pos >= len) continue;
        if (cnt == 0) cnt = V[i].size();
        for (int j = pos; j < len; j++) {
            p.push_back(V[i][j]);
        }
        start_pos = *(--p.end());
    }
    int len = p.size();
    for (int i = 0, j = len - 1; i < j; i++, j--) {
        swap(s[p[i]], s[p[j]]);
    }
    for (int i = 1; i < n; i++) {
        if (s[i] < s[i - 1]) {
            cout << "-1" << endl;
            return;
        }
    }
    cout << p.size() - cnt << endl;
}

int main() {
    int Case;
    cin >> Case;
    while (Case--) {
        solve();
    }
    return 0;
}

D,E 更新中…

学习交流

以下为学习交流QQ群,群号: 546235402,每周题解完成后都会转发到群中,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是低代码(Low-code) 低代码开发平台特点-优势介绍

随着数字化转型的加速&#xff0c;越来越多的企业开始认识到应用开发的重要性。然而&#xff0c;传统的应用开发方式往往需要耗费大量的时间和资源&#xff0c;而且开发周期长&#xff0c;难以满足企业的快速需求。在这样的背景下&#xff0c;Low Code Platform(低代码平台)应运…

算法分析与设计课后练习26

单源最短路径问题 第一组测试参数 const int n = 6; //图顶点个数加1 int c[n][n] = {{0,0,0,0,0,0}, {0,0,2,3,5000,5000}, {0,5000,0,1,2,5000}, {0,5000,5000,0,9,2}, {0,5000,5000,5000,0,2}, {0,5000,5000,5000,5000,0}}; // 图的邻接矩阵 第二组测试参数 const int n =…

HuatuoGPT模型介绍

文章目录 HuatuoGPT 模型介绍LLM4Med&#xff08;医疗大模型&#xff09;的作用ChatGPT 存在的问题HuatuoGPT的特点ChatGPT 与真实医生的区别解决方案用于SFT阶段的混合数据基于AI反馈的RL 评估单轮问答多轮问答人工评估 HuatuoGPT 模型介绍 HuatuoGPT&#xff08;华佗GPT&…

JavaSE 排序

目录 1 概念1.1 排序1.2 稳定性 2 常见基于比较排序算法总览3 插入排序3.1 直接插入排序3.1.1 思想3.1.2 实现3.1.3 性能分析 3.2 折半插入排序3.2.1 思想3.2.2 实现3.2.3 性能分析 3.3 希尔排序3.3.1 思想3.3.2 实现3.3.3 性能分析 4 选择排序4.1 选择排序4.1.1 思想4.1.2 实现…

构建可扩展的网校平台:在线教育系统源码设计与架构最佳实践

随着科技的不断发展&#xff0c;在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨如何构建一个可扩展的网校平台&#xff0c;重点关注在线教育系统的源码设计和架构最佳实践。 一、引言 在当前信息时代&#xff0c;教育已经超越了传统的教学方式&#xff0c;转…

cleanmymac有必要买吗 macbook空间不足怎么办 清理macbook磁盘空间

大家早上好&#xff0c;中午好&#xff0c;下午好&#xff0c;晚上好。 文章有点长&#xff0c;建议先收藏。 macbook是一款非常受欢迎的笔记本电脑&#xff0c;它拥有优秀的性能和设计&#xff0c;但是也有一个常见的问题&#xff0c;就是磁盘空间不足。如果你的macbook经常…

意外之喜!5款小巧工具助你轻松面对繁忙生活

​ 在繁忙的日常中&#xff0c;简单而巧妙的小工具能够带来意外的惊喜。这五款工具或许正是你所需要的&#xff0c;不妨一试。 1.图片背景移除——PhotoScissors ​ PhotoScissors是一款图片背景移除工具&#xff0c;可以使用人工智能技术自动识别图片的前景和背景&#xff0…

从gitlab上拉代码出现很多修改文件。

问题描述&#xff1a; 从gitlab上拉一个项目&#xff0c;出现以下非常多的已修改文件&#xff0c; 问题解决&#xff1a; Unix/Linux 系统使用的是 LF 用作换行符。Windows 一直使用的 CRLF&#xff08;即&#xff0c;回车 CR和换行 LF&#xff09;作为换行符。然而&#xf…

Next.js 学习笔记(四)——数据获取

数据获取 数据获取、缓存和重新验证 数据获取是任何应用程序的核心部分。本页介绍如何在 React 和 Next.js 中获取、缓存和重新验证数据。 有四种方法可以获取数据&#xff1a; 在服务器上&#xff0c;使用 fetch在服务器上&#xff0c;使用第三方库在客户端上&#xff0c;…

Java最全面试题专题---4、并发编程(1)

基础知识 并发编程的优缺点 为什么要使用并发编程&#xff08;并发编程的优点&#xff09; 充分利用多核CPU的计算能力&#xff1a;通过并发编程的形式可以将多核CPU的计算能力发挥到极致&#xff0c;性能得到提升方便进行业务拆分&#xff0c;提升系统并发能力和性能&#…

网络游戏需要资质

网络游戏需要资质 介绍一、ICP许可证或者ICP备案二、《网络出版服务许可证》三、网络游戏的出版前置审批四、《网络文化经营许可证》 介绍 前段时间一直在忙着给公司做APP的ICP备案所以一直也没有更新文章&#xff0c;去办这个APP的ICP备案也是踩了些坑&#xff0c;今天来讲一…

安全运营之安全加固和运维

安全运营是一个将技术、流程和人有机结合的复杂系统工程&#xff0c;通过对已有安全产品、工具和服务产出的数据进行有效的分析&#xff0c;持续输出价值&#xff0c;解决安全问题&#xff0c;以确保网络安全为最终目标。 安全加固和运维是网络安全运营中的两个重要方面。 安全…

使用栈的特性实现多位计算器

创建一个栈&#xff1a; //定义一个ArrayStack 表示栈 class ArrayStack2 {private int maxSize; //栈的大小private int[] stack; //定义一个栈private int top -1; //定义一个栈顶指针public ArrayStack2(int size) {maxSize size;stack new int[maxSize];}//栈满public …

黑马头条--day04--文章审核

目录 一.审核 1.流程 2.内容安全第三方接口 3.百度AI审核 3.1首先注册百度云账号&#xff0c;然后完成个人信息认证 3.2开启文本审核和图像审核功能 3.3添加sdk依赖 3.4构建测试类 3.5文本审核 3.6图片审核 3.7对百度云审核的封装 3.7.1在自媒体服务的config目录下面…

【1.8计算机组成与体系结构】磁盘管理

目录 1.磁盘基本结构与存取过程1.1 磁盘基本结构1.2 磁盘的存取过程 2.磁盘优化分布存储3.磁盘单缓冲区与双缓冲区4.磁盘移臂调度算法 1.磁盘基本结构与存取过程 1.1 磁盘基本结构 磁盘&#xff1a;柱面&#xff0c;磁道&#xff0c;扇区。 1.2 磁盘的存取过程 存取时间寻…

C#调用阿里云接口实现动态域名解析,支持IPv6(Windows系统下载可用)

电信宽带一般能申请到公网IP&#xff0c;但是是动态的&#xff0c;基本上每天都要变&#xff0c;所以想到做一个定时任务&#xff0c;随系统启动&#xff0c;网上看了不少博文很多都支持IPv4&#xff0c;自己动手写了一个。 &#xff08;私信可全程指导&#xff09; 部署步骤…

原生JS实现组件切换(不刷新页面)

这是通过原生Es6实现的组件切换&#xff0c;代码很简单&#xff0c;原理和各种框架原理大致相同。 创建文件 ├── component&#xff1a;存放组件 │ ├── home1.js&#xff1a;组件1 │ ├── home2.js&#xff1a;组件2 ├── index.html ├── index.js初始化ht…

台湾虾皮本土店铺:如何在台湾虾皮本土店铺开展电商业务

在台湾地区&#xff0c;虾皮&#xff08;Shopee&#xff09;是一款备受欢迎的电商平台。虾皮拥有强大的技术团队、丰富的电商经验和对市场的深刻理解。虾皮本土店铺凭借其在出售、物流、回款、售后、仓储等方面的一条龙服务&#xff0c;为广大卖家提供了全方位的保障和支持。如…

VSCode报错插件Error lens

1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下&#xff1a; 3.代码测试一下&#xff1a;书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件&#xff0c;学习过程中会比较实用方便&#xff0c;需要安装中文插件的小伙伴请点…

【性能测试】资深老鸟带你,一篇打通负载与压力测试的区别...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 负载测试 是通过…