当前位置: 首页 > news >正文

Codeforces Round 915 (Div. 2)

Constructive Problems(Problem - A - Codeforces)

题目大意:现在有一片城市被摧毁了,需要进行重建,当一个城市水平相邻和竖直相邻的位置都至少有一个城市的时候,该城市可以被重建。所有城市排成n行m列的矩形,政府先拨款重建一部分城市,剩下的需要各个城市自建,问政府最少需要重建多少个城市。

思路:我们可以发现,要想重建,城市需要是锯齿形的,即:

如上图,我们可以发现,同样是4个,但是左图中四个可以伸延至整个区间,右图中则一个也不能往外延伸了,所以,我们可以发现,这样斜着的是最优解。那么对于矩形的,如下图

所以很容易发现斜着只能补成一个正方形,要使整个区域都被覆盖到,那么就要取最长的那条边的长度作为个数。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n,m;scanf("%d%d",&n,&m);int ans=max(n,m);printf("%d\n",ans);}
}

 Begginer's Zelda(Problem - B - Codeforces)

题目大意:给定一棵树,我们每次操作可以选择树上的两个点,然后将两点及中间的路径合并成一个点。问要将整棵树合并成一个点,最少需要操作多少次。

思路:这道题怎么说呢,挺难受的。我最开始分析样例,因为样例给的数据都很简单,所以抽出最长路然后剩下的都是直接连在最长路上的点,稍微讨论一下就行,但是显然,这是有bug的,

比如上图,抽出最长路后,剩下的点不是直接连在最长路上的。所以很明显,最长路这个思路是不通的,然后,我竟然又想到每合并一次就去找最长路,说人话就是去直接模拟我认为的最优策略。这样的话有两个问题,一个是最长路上的各点其实没有那么容易确定,我们能确定的就是起点、终点以及路径长度,所以合并操作实际并不容易。另外一个是,这个会出现超时问题,因为我们要找很多次。所以此路不通。然后我又想到能不能从出度的角度来考虑,然后我想到的是从出度最大的那些点入手去找规律,显然越讨论越复杂,它们根本不具有什么规律。至此我想到的路全部不通,而且推理验证实际上花的时间远比把这几行思路敲出来要多。最后这道题的思路实际上是从出度最少的点入手,我们仔细想想,我们的路径当延伸到一个出度大于1的点之后,肯定还能再往后延伸,直到延伸到一个出度为1的点才停。而且这个是通用的,不管我们在什么情况下,最优的路径一定要尽可能长,未必非要是最长路,但它至少是一定不能再延伸了的路。然后将这条路上的点合并成一个之后,这两个出度为1的点就消失了。那么实际上,我们只需要找到哪些点出度为1,然后两两组合,如果是奇数个,再把不能被组合的那个点加上即可。

#include<bits/stdc++.h>
using namespace std;
int d[100010];
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++) d[i]=0;for(int i=1;i<n;i++){int a,b;scanf("%d%d",&a,&b);d[a]++,d[b]++;}int cnt=0;for(int i=1;i<=n;i++) if(d[i]==1) cnt++;int ans=ceil(cnt*1.0/2);printf("%d\n",ans);}
}

Largest Subsequence(Problem - C - Codeforces)

题目大意:给定一个长为n的字符串s,我们能进行的操作就是选定s中字典序最大的子序列,然后执行一次向右循环移动一位的操作。问最终能否将s变成非降序排列,如果可以输出需要进行的操作次数,如果不可以那么就输出-1.

思路:我们可以发现,对于每个字符串字典序最大的子序列有且仅有一个,而且这个序列中的字母是非递增关系。我们对s能进行的更改,其实也就是将这个子序列逆转,其他的都是改不了的。再进一步,将子序列逆转实际上,有点类似对称操作,因为子序列中第一个字母是最大的,最后要将它转到最后一位,后面的转到前面来了就不变了,所以实际上类似一个对称操作。

所以我们可以在统计最大序列的时候,将它们的下标也记录下来,然后直接在字符串里进行更改,最后判断字符串是否符合要求即可。但是对于第一个字母有多个的情况,输出操作数的时候实际是要处理一下的。因为我们正常的就是子序列长度-1,但是如下图:

我们实际不用转那么多次。所以这个也需要特别统计一下,最后的结果应该是:子序列长度-1-(子序列首字母个数-1),对了,再多提一句,子序列是用类似于栈的思想来统计的。

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);string s;cin>>s;vector<char>s1;vector<int>v;for(int i=0;i<n;i++){while(s1.size()&&s1.back()<s[i]){v.pop_back();s1.pop_back();}if(!s1.size()||s1.back()>=s[i]) s1.push_back(s[i]),v.push_back(i);}int len=v.size();char st=s[v[0]];map<char,int>mp;for(int i=0;i<len;i++) mp[s[v[i]]]++;for(int i=0;i<len/2;i++){int l=v[i],r=v[len-1-i];if(s[l]!=s[r])swap(s[l],s[r]);}char c=s[0];int flag=1;for(int i=1;i<s.size();i++){if(c>s[i]) {flag=0;break;}c=s[i];}if(flag) {int ans=v.size()-1-(mp[st]-1);printf("%d\n",ans);}else printf("-1\n");}
}

ps:其实很多时候,思路无非就两种,一种是模板,就是前人把经验总结好,你学会了他们总结的经验,看到题目直接写,另外一种就是你需要自己去题目中抽丝剥茧发现规律。我们对于第一种实际上都不会多想而且我们也更喜欢第一种,因为我们知道它的正确性,把它作为一种客观真理来用,就像人有两只手,我们不会一直去追问为什么人有两只手,就这些都是自然而然地事情,这样就减少了思考的痛苦,我们只要知道即可。但是面对第二种,我们对于陌生的思路就很喜欢找到一个自然而然的知识与它绑在一起,仿佛这样就可以说服自己,没写出这道题仅仅是因为这个知识点不知道而已。但是,不是所有的题目都是水到渠成的存在,对于第二种题目我们实际上很难找到那种和它完全符合的,水到渠成的知识点,因为模板题是有限的。所以我们永远不能用更多的学习去代替思考,不是所有的题都对应一个模板。我们需要做的是抽丝剥茧,一层层分析,去分析题目本质,去分析操作的实际意义,一边分析一边去想可能的思路,正着想到的思路不通倒着能不能用,区间分析不通单点能不能分析明白,最大值没办法入手最小值能不能写出来,不断思考不断推翻不断追问,很难受但是只有这样才能获得真正的令人安心的成长。题目要么就是把本质分析清楚,要么就抽象出一个规律。就像b题,本质就是每次选的路一定要延伸到不能延伸,只有叶子节点相连才能实现,规律就是叶子节点的个数除于2上取整。当然这两种方法都逃不过分析和思考,尽管再难都要去进行大量的分析和思考,思考是无可替代的。大量题目的练习不仅是查漏补缺,去学自己不会的知识点,更多的是要强迫自己不断去思考,锻炼思考的能力。毫无头绪也罢,痛苦难受也罢,一定不要放弃思考。

这条路上你的伙伴目标可以有很多,但是对手只有你自己。所以先把目光放在自己身上,就像那个dfs的迷宫,不断地试错总会找到正确的路,而且从某种程度上来说,你已经找到了不是吗。

  

 

相关文章:

Codeforces Round 915 (Div. 2)

Constructive Problems&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;现在有一片城市被摧毁了&#xff0c;需要进行重建&#xff0c;当一个城市水平相邻和竖直相邻的位置都至少有一个城市的时候&#xff0c;该城市可以被重建。所有城市排成n行m列的矩…...

C语言经典错误总结(三)

一.指针与数组理解 我们都知道定义一个数组然后对其进行各种想要的操作&#xff0c;但是你真的能够区分那些是对数组的操作&#xff0c;那些是通过指针实现的吗&#xff1f; 例如;arr[1]10;这个是纯粹对数组操作实现的吗&#xff1f; 答案肯定不是&#xff0c;实际上我们定义…...

Ubuntu系统入门指南:基础操作和使用

Ubuntu系统的基础操作和使用 一、引言二、安装Ubuntu系统三、Ubuntu系统的基础操作3.1、界面介绍3.2、应用程序的安装和卸载3.3、文件管理3.4、系统设置 四、Ubuntu系统的日常使用4.1、使用软件中心4.2、浏览器的使用和网络连接设置4.3、邮件客户端的配置和使用4.4、文件备份和…...

MyBatis原理解读

我们项目中多用MyBatis进行数据库的读写,开源的MyBatis-Plus框架对其进行了增强,使用上更加简单,我们之前的很多项目也是直接用的MyBatis-Plus。 数据库操作的时候,简单的单表读写,我们可以直接在方法里链式组装SQL,复杂的SQL或涉及多表联合join的,需要在xml手写SQL语句…...

Linux---文本搜索命令

1. grep命令的使用 命令说明grep文本搜索 grep命令效果图: 2. grep命令选项的使用 命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行 -i命令选项效果图: -n命令选项效果图: -v命令选项效果图: 3. grep命令结合正则表达式的使用 正则表达式说明^以指…...

Unity中Shader语义的理解

前言 以下内容主要是个人理解&#xff0c;如有错误&#xff0c;欢迎严厉批评指正。 一、语义的形式在Shader中是必要的吗&#xff1f; 不是必要的。 使用HLSL和CG语言来编写Shader需要语义&#xff0c;使用GLSL编写Shader不需要。 二、语义的意义&#xff1f; 语义是什么&…...

Flink系列之:Top-N

Flink系列之&#xff1a;Top-N 一、TOP-N二、无排名输出优化 一、TOP-N 适用于流、批Top-N 查询可以根据指定列排序后获得前 N 个最小或最大值。最小值和最大值集都被认为是Top-N查询。在需要从批表或流表中仅显示 N 个底部或 N 个顶部记录时&#xff0c;Top-N 查询是非常有用…...

CSS的三大特性(层叠性、继承性、优先级---------很重要)

CSS 有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级。 层叠性 场景&#xff1a;相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要解决样式冲突 的问题 原则&#xff1a;  样式冲突&am…...

飞天使-docker知识点10-docker总结

文章目录 docker 知识点汇总docker chatgpt解释学习路线cmd和 ENTRYPOINT 的区别harbor安装漏洞扫描 docker 知识点汇总 docker 基础用法 docker 镜像基础用法 docker 容器网络 docker 存储卷 dockerfile docker仓库 harbor docker-compose docker chatgpt解释学习路线 学习…...

旅游管理虚拟情景实训教学系统演示

首先&#xff0c;虚拟情景实训教学系统为旅游管理专业的学生提供了一个全新的实践平台。在传统的旅游管理教学中&#xff0c;学生往往只能通过理论学习来了解相关知识&#xff0c;而无法亲身实践。虚拟情景实训教学系统则可以通过模拟真实的旅游场景&#xff0c;让学生能够亲身…...

Linux Shell——输入输出命令详解

Shell 输入输出 1. read2. echo3. printf 总结 最近学习了shell相关语法&#xff0c;顺便总结一下关于shell的输入输出命令read和echo、printf。 1. read shell的输入命令&#xff0c;可以从标准控制台中读取一行&#xff0c;并把输入行中的每个字段赋值给指定的变量 可以看到…...

MFC 第一个窗口程序

目录 一、新建Windows桌面应用程序&#xff0c;空项目 二、修改项目属性 三、编写程序 一、新建Windows桌面应用程序&#xff0c;空项目 创建MFCBase.cpp&#xff0c;整个项目很干净 二、修改项目属性 使用多字节编码 使用MFC库 三、编写程序 需要包含 afxwin.h 文件&…...

SQL语句的执行顺序怎么理解?

SQL语句的执行顺序怎么理解&#xff1f; 我们常常会被SQL其书写顺序和执行顺序之间的差异所迷惑。理解这两者的区别&#xff0c;对于编写高效、可靠的SQL代码至关重要。今天&#xff0c;让我们用一些生动的例子和场景来深入探讨SQL的执行顺序。 一、书写顺序 VS 执行顺序 SQ…...

js解析.shp文件

效果图 原理与源码 本文采用的是shapefile.js工具 这里是他的npm地址 https://www.npmjs.com/package/shapefile 这是他的unpkg地址&#xff0c;可以点开查看源码 https://unpkg.com/shapefile0.6.6/dist/shapefile.js 这个最关键的核心问题是如何用这个工具&#xff0c;网上…...

关于“Python”的核心知识点整理大全25

目录 10.3.4 else 代码块、 10.3.5 处理 FileNotFoundError 异常 alice.py 在这个示例中&#xff0c;try代码块引发FileNotFoundError异常&#xff0c;因此Python找出与该错误匹配的 except代码块&#xff0c;并运行其中的代码。最终的结果是显示一条友好的错误消息&#x…...

代码随想录刷题题Day15

刷题的第十五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day15 任务 ● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历…...

软件设计师——信息安全(一)

&#x1f4d1;前言 本文主要是【信息安全】——软件设计师——信息安全的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…...

git必须掌握:git远程变动怎么解决

如何已经指定了选择分支 那下面的分支名称可以省略 如果远程分支存在变动&#xff0c;通常 git 推送的流程如下&#xff1a; 首先&#xff0c;使用 git fetch 命令从远程仓库获取最新的分支信息和变动。 git fetch然后&#xff0c;可以使用 git merge 或者 git rebase 命令进…...

Python里的时间模块

time 模块 时间表示方式 时间戳 timestamp:表示的是从 1970 年1月1日 00:00:00 开始按秒计算的偏移量UTC(Coordinated Universal Time, 世界协调时)亦即格林威治天文时间,世界标准时间。在中国为 UTC+8 DST(Daylight Saving Time) 即夏令时;结构化时间(struct_time): …...

SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测

SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测 目录 SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-CNN-GRU-selfAttention灰狼算法优化卷积门控循环…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

java+webstock

maven依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.3.5</version></dependency><dependency><groupId>org.apache.tomcat.websocket</groupId&…...

关于疲劳分析的各种方法

疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数&#xff0c;可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础&#xff0c;采用雨流法取出一个个相互独立、互不相关的应力循环&…...

MySQL用户远程访问权限设置

mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一&#xff1a;创建用户并授予远程访问权限方法二&#xff1a;修改现有用户的访问限制方法三&#xff1a;授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...