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(Problem - A - Codeforces) 题目大意:现在有一片城市被摧毁了,需要进行重建,当一个城市水平相邻和竖直相邻的位置都至少有一个城市的时候,该城市可以被重建。所有城市排成n行m列的矩…...
C语言经典错误总结(三)
一.指针与数组理解 我们都知道定义一个数组然后对其进行各种想要的操作,但是你真的能够区分那些是对数组的操作,那些是通过指针实现的吗? 例如;arr[1]10;这个是纯粹对数组操作实现的吗? 答案肯定不是,实际上我们定义…...
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语义的理解
前言 以下内容主要是个人理解,如有错误,欢迎严厉批评指正。 一、语义的形式在Shader中是必要的吗? 不是必要的。 使用HLSL和CG语言来编写Shader需要语义,使用GLSL编写Shader不需要。 二、语义的意义? 语义是什么&…...
Flink系列之:Top-N
Flink系列之:Top-N 一、TOP-N二、无排名输出优化 一、TOP-N 适用于流、批Top-N 查询可以根据指定列排序后获得前 N 个最小或最大值。最小值和最大值集都被认为是Top-N查询。在需要从批表或流表中仅显示 N 个底部或 N 个顶部记录时,Top-N 查询是非常有用…...
CSS的三大特性(层叠性、继承性、优先级---------很重要)
CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠性 场景:相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 原则: 样式冲突&am…...
飞天使-docker知识点10-docker总结
文章目录 docker 知识点汇总docker chatgpt解释学习路线cmd和 ENTRYPOINT 的区别harbor安装漏洞扫描 docker 知识点汇总 docker 基础用法 docker 镜像基础用法 docker 容器网络 docker 存储卷 dockerfile docker仓库 harbor docker-compose docker chatgpt解释学习路线 学习…...
旅游管理虚拟情景实训教学系统演示
首先,虚拟情景实训教学系统为旅游管理专业的学生提供了一个全新的实践平台。在传统的旅游管理教学中,学生往往只能通过理论学习来了解相关知识,而无法亲身实践。虚拟情景实训教学系统则可以通过模拟真实的旅游场景,让学生能够亲身…...
Linux Shell——输入输出命令详解
Shell 输入输出 1. read2. echo3. printf 总结 最近学习了shell相关语法,顺便总结一下关于shell的输入输出命令read和echo、printf。 1. read shell的输入命令,可以从标准控制台中读取一行,并把输入行中的每个字段赋值给指定的变量 可以看到…...
MFC 第一个窗口程序
目录 一、新建Windows桌面应用程序,空项目 二、修改项目属性 三、编写程序 一、新建Windows桌面应用程序,空项目 创建MFCBase.cpp,整个项目很干净 二、修改项目属性 使用多字节编码 使用MFC库 三、编写程序 需要包含 afxwin.h 文件&…...
SQL语句的执行顺序怎么理解?
SQL语句的执行顺序怎么理解? 我们常常会被SQL其书写顺序和执行顺序之间的差异所迷惑。理解这两者的区别,对于编写高效、可靠的SQL代码至关重要。今天,让我们用一些生动的例子和场景来深入探讨SQL的执行顺序。 一、书写顺序 VS 执行顺序 SQ…...
js解析.shp文件
效果图 原理与源码 本文采用的是shapefile.js工具 这里是他的npm地址 https://www.npmjs.com/package/shapefile 这是他的unpkg地址,可以点开查看源码 https://unpkg.com/shapefile0.6.6/dist/shapefile.js 这个最关键的核心问题是如何用这个工具,网上…...
关于“Python”的核心知识点整理大全25
目录 10.3.4 else 代码块、 10.3.5 处理 FileNotFoundError 异常 alice.py 在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的 except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息&#x…...
代码随想录刷题题Day15
刷题的第十五天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day15 任务 ● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历…...
软件设计师——信息安全(一)
📑前言 本文主要是【信息安全】——软件设计师——信息安全的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄…...
git必须掌握:git远程变动怎么解决
如何已经指定了选择分支 那下面的分支名称可以省略 如果远程分支存在变动,通常 git 推送的流程如下: 首先,使用 git fetch 命令从远程仓库获取最新的分支信息和变动。 git fetch然后,可以使用 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灰狼算法优化卷积门控循环…...
C#学习相关系列之自定义遍历器
在C#中,自定义遍历器需要实现IEnumerable接口和IEnumerator接口。其中,IEnumerable接口包含一个GetEnumerator方法,该方法返回一个IEnumerator接口的实例,而IEnumerator接口包含Current、MoveNext和Reset方法。 IEnumerable&#…...
WPS没保存关闭了怎么恢复数据?3个方法,完成数据恢复!
“我今天在使用WPS时,突然有点急事出去了一趟,但是我忘记保存文档了,回来之后发现电脑自动关机了,我的文档也没了!这可怎么办呢?有什么办法可以找回这些数据吗?” 在快节奏的工作中,…...
数据结构和算法-最小生成树(prim和krusakal)和最短路径问题(BFS和dijkastra和floyd)
文章目录 最小生成树总览生成树广度优先生成树深度优先生成树最小生成树Prim算法Kruskal算法Prim vs KrusakalPrim的实现Kruskal的实现 小结 最短路径问题单源最短路径问题BFS求无权图的单源最短路径小结Dijkastra算法算法时间复杂度不适用情况 每一对顶点的最短路径问题Floyd算…...
响应者链概述
响应者链 iOS事件的3大类型 Touch Events(触摸事件)Motion Events(运动事件,比如重力感应和摇一摇等)Remote Events(远程事件,比如用耳机上得按键来控制手机) 触摸事件 处理触摸事件的两个步骤 寻找事件的最佳响应者事件的响应在响应链中的传递 寻…...
ShenYu网关Http服务探活解析
文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时,将服务从可用列表中移除。 网关端服务探活 以divide插件为例,看下divide插件是如何获…...
基于dockerfile搭建LNMP
组件自定义IP所需组件nginx172.111.0.10nginxwordpressmysql172.111.0.20mysql-5.7.20php172.111.0.30php LNMP介绍 L:Linux平台,操作系统,另外桑组件的运行平台 N:nginx 提供前端页面 M:MySQL,开源关系的…...
基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(三)
目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建3. 模型训练及保存1)模型训练2)模型保存 4. 模型生成1)模型导入及调用2)相关代码(1)布局文件(2ÿ…...
springMVC-@RequestMapping
基本介绍 RequestMapping注解可以指定控制器/处理器的某个方法的请求的url, 示例 (结合springMVC基本原理理解) Controller public class UserHandler {RequestMapping(value "/login")public String login() {System.out.println("登…...
智能优化算法应用:基于树种算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于树种算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于树种算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.树种算法4.实验参数设定5.算法结果6.参考文献7.MA…...
web前端项目-影视网站开发
影视网站 本项目主要使用到了 HTML;CSS;JavaScript脚本技术;AJAX无刷新技术;jQuery等技术实现了动态影视网页 运行效果: 一:index.html <!DOCTYPE> <html lang"en"> <head>…...
wordpress复制按钮插件/b2b平台有哪些网站
打算从今天开始学java啊,待会滚去找资料了。现在谈一下学习java阶段性的理解。由于现在对java真的啥也不知道啊,不过还是要瞎鸡儿写点自己的看法,以下看法应该也使适用于其它语言: 第一阶段,入门级,初步地总…...
自助建站平台便宜/百度分析工具
这个问题已经在这里有了答案: > Java Ternary without Assignment 4个如果您编写如下内容:boolean condition;(...)String out condition ? "true" : "false";Syst…...
专业网站建设哪家效果好/网络营销的50种方法
关于数组有很多种的解释,在w3c中对数组的作用有如下的解释: 使用单独的变量名来存储一系列的值。 js不同于其他的编程语言(C语言、java),因为js是弱类型,所以js中的数组可以存储不同类型的值,同…...
扬州 网站 建设/培训网络营销机构
“富友软件软件?没听过,做什么的?” “富友软件软件?当然知道了,我们这行很多家都选他们的软件。” 两种截然不同的回答,在一定程度上也反映了这家软件厂商的定位:专注服装行业,…...
wordpress看板娘插件/今日国际新闻头条15条
让我们看一下上面程序的各个部分: 程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。下一行是 namespace 声明。一个 namespace 里包含了一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。下一行…...
网站建设网络推广文章/个人网站首页设计
使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonaddins模块中。 pythonaddins模块包含了…...