当前位置: 首页 > 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灰狼算法优化卷积门控循环…...

从手机SoC到汽车芯片:深入聊聊AMBA总线家族(AHB/APB/AXI)的选型与实战踩坑

从手机SoC到汽车芯片&#xff1a;AMBA总线家族的选型与实战经验 在移动计算和汽车电子两大领域&#xff0c;芯片架构师们每天都在面临类似的挑战&#xff1a;如何在有限的硅片面积和功耗预算内&#xff0c;实现最高的系统性能。AMBA总线作为连接处理器、内存和各种外设的"…...

解放双手!绝区零智能自动化工具让你的游戏体验翻倍升级

解放双手&#xff01;绝区零智能自动化工具让你的游戏体验翻倍升级 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 还在为《…...

AI驱动GitHub仓库分析:从数据到洞察的工程实践

1. 项目概述&#xff1a;一个面向开发者的AI驱动GitHub分析工具最近在GitHub上发现一个挺有意思的项目&#xff0c;叫instagit&#xff0c;来自InstalabsAI这个组织。乍一看名字&#xff0c;可能会联想到Instagram或者某种社交工具&#xff0c;但实际上&#xff0c;它是一个完全…...

Ryujinx模拟器三部曲:从新手到专家的Switch游戏PC体验进阶指南

Ryujinx模拟器三部曲&#xff1a;从新手到专家的Switch游戏PC体验进阶指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否曾梦想在电脑上畅玩《塞尔达传说&#xff1a;旷野之息…...

WinGet安装工具:PowerShell自动化部署的架构解析与实践指南

WinGet安装工具&#xff1a;PowerShell自动化部署的架构解析与实践指南 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirror…...

基于TRRS Trinkey的辅助技术设备开发:从接口转换到可编程交互

1. 项目概述&#xff1a;当辅助技术遇上可编程硬件如果你接触过辅助技术&#xff08;Assistive Technology, AT&#xff09;&#xff0c;或者身边有朋友需要借助特殊设备与数字世界交互&#xff0c;你可能会发现&#xff0c;市面上很多现成的开关、控制器要么功能单一&#xff…...

考古现场数据智能治理新范式(NotebookLM+地层学语义建模深度解析)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;考古现场数据智能治理新范式&#xff08;NotebookLM地层学语义建模深度解析&#xff09; 在田野考古数字化进程中&#xff0c;传统地层记录存在碎片化、非结构化与语义断层三大瓶颈。NotebookLM 作为基…...

Unity角色控制器深度解析:从原理到实战,打造3A级移动手感

1. 项目概述&#xff1a;一个为游戏角色注入灵魂的控制器如果你在游戏开发领域摸爬滚打过&#xff0c;尤其是涉足过3D动作、冒险或者平台跳跃类项目&#xff0c;那你一定对“角色控制器”这个概念又爱又恨。爱的是&#xff0c;它是连接玩家输入与游戏世界反馈的核心桥梁&#x…...

我们团队的技术债已经堆成山,我用这四步说服老板给时间重构

在软件测试的日常工作中&#xff0c;我们或许是技术债最敏锐的感知者。每一次回归测试的漫长等待&#xff0c;每一个在“祖传代码”上小心翼翼打补丁的深夜&#xff0c;每一份因环境不稳定而飘红的测试报告&#xff0c;都在无声地控诉着那座压得团队喘不过气的“屎山”。然而&a…...

Rust构建的跨平台数据备份工具relic:安全高效的快照管理与自动化策略

1. 项目概述&#xff1a;一个面向未来的跨平台数据备份与同步工具最近在整理个人工作流时&#xff0c;我一直在寻找一个能让我在不同设备、不同操作系统之间无缝同步项目配置、文档和代码片段的工具。市面上的云盘虽然方便&#xff0c;但总感觉不够“程序员友好”——要么同步粒…...