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的迷宫,不断地试错总会找到正确的路,而且从某种程度上来说,你已经找到了不是吗。

  

 

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

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

相关文章

sourcetree使用详解

介绍 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具&#xff0c;同时也是Mn版本控制系统工具。支持创建、克隆、提交、push、pull 和合并等操作。——百度百科 是一款比较好用的图形化GUI的git、hg管理工具。还有一些其他的可视化代码管理工具&#x…

Pycharm 如何更改成中文版| Python循环语句| for 和 else 的搭配使用

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

ASP.NET MVC权限管理系实战之一验证码功能实现

1&#xff0c;权限的管理系统&#xff1a;开发项目必备的一个的功能&#xff1b;该项目使用 ASP.NET MVC5 SqlServer EF6 IOC容器 BoostStrap 2&#xff0c;登录界面验证码功能实现&#xff0c;整体效果如下&#xff1b; 3&#xff0c;接下来就是代码部分实现&#xff0c;前端…

使用Nginx实现负载均衡的实践指南

目录 前言1 负载均衡简介2 需要实现的效果3 准备2个tomcat服务器4 配置Nginx实现负载均衡5 Nginx的服务器策略5.1 轮询&#xff08;默认&#xff09;5.2 权重&#xff08;weight&#xff09;5.3 IP哈希&#xff08;ip_hash&#xff09;5.4 响应时间公平分配&#xff08;fair&am…

朱卫明:从韶关走向世界的创作型歌手

朱卫明&#xff0c;艺名Aming&#xff0c;是一位来自广东韶关的杰出唱作音乐人。他以其独特的创作才华和深情的嗓音&#xff0c;赢得了众多歌迷的喜爱。作为一名创作型歌手&#xff0c;朱卫明用音乐传递情感&#xff0c;用歌声打动人心。 一、早年经历与音乐启蒙 朱卫明出生于…

2020年第九届数学建模国际赛小美赛D题石头剪刀游戏与合作解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 D题 石头剪刀游戏与合作 原题再现&#xff1a; 小时候你可能至少玩过几次石头剪刀游戏。在这个游戏中&#xff0c;你几乎有三个选择&#xff0c;每一个都有一个项目要打败&#xff0c;一个项目输给。石头打败剪刀&#xff0c;剪刀剪纸和布覆…

玩转Docker(五):网络

文章目录 〇、关于linux系统网络一、none网络二、host网络三、bridge网络四、user-defined网络 Docker安装时会自动在host上创建三个网络&#xff0c;我们可用docker network ls命令查看&#xff1a; docker network ls那么这几种网络分别有什么含义呢&#xff1f;在回答这个问…

如何使用自动化工具编写测试用例?

以下为作者观点&#xff0c;仅供参考&#xff1a; 在快速变化的软件开发领域&#xff0c;保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加&#xff0c;仅手动测试无法满足行业需求。 这就是测试自动化发挥作用的地方&#xff0c;它使软件测试人员能…

机器学习:自督导式学习模型

outline 自督导式模型有跨语言的能力 中文&#xff1a;DRCD的数据集英文&#xff1a;SQuAD的数据集 在104种语言上进行学习&#xff0c;并在英文上进行微调&#xff0c;结果在中文上效果也比较好。 XTREME Benchmark 只用英文进行微调&#xff0c;在其他剩下的语言中进行测试。…

关于#c语言#的问题:设计函数minArr(),传入一个行n列4的二维整型数组,求该数组的最小值

设计函数minArr()&#xff0c;传入一个行n列4的二维整型数组&#xff0c;求该数组的最小值 #include <stdio.h> int minArr(int(*p)[4], int n) {int min p[0][0];for (int i 0; i < n; i) {for (int j 0; j < 4; j) {if (p[i][j] < min) {min p[i][j];}}}r…

PyTorch官网demo解读——第一个神经网络(2)

上一篇&#xff1a;PyTorch官网demo解读——第一个神经网络&#xff08;1&#xff09; 继上一篇文章我们展示了第一个神经网络的完整代码&#xff0c;今天我们来聊聊这个神经网络的模型设计。 这个demo实际上只使用了一个简单的线性模型&#xff1a;y wx b&#xff1b; 手写…

NAS搭建WebDAV服务同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

Ps:形状工具 - 描边选项

在形状工具的工具选项栏或“属性”面板中&#xff0c;单击“设置形状描边类型” Set shape stroke type菜单图标可打开“描边选项” Stroke Options面板。 描边预设 Stroke Type 默认列出了实线、虚线和点线三种类型的描边&#xff0c;单击可应用。 自己创建并存储的描边类型&a…

解析神器Xpath详解+实战

解析神器Xpath详解实战 有同学说&#xff0c;我正则用的不好&#xff0c;处理HTML文档很累&#xff0c;有没有其他的方法&#xff1f; 有&#xff01;那就是XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 目标&am…

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成&#xff0c;表格之间的关系通过共同的列&#xff08;外键&#xff09;关联&#xff0c;人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言&#xff0c;但是对于普通用户而言&#xff0c;编写SQL语句有一定的难度。 Text…

python蓝桥杯的回形取数

#来源于蓝桥杯的训练 题号是用户登录https://www.lanqiao.cn/problems/1517/learning/?page1&first_category_id1&problem_id1517 根据题目描述可以知道&#xff0c;我们传入的是一个矩阵。 在这里我们使用列表来实现矩阵。 那么&#xff0c;我们直接看代码 dir …

基于Springboot的高校教学评价系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Springboot的高校教…

Intellij IDEA 运行maven报错误“CreateProcess error=2, 系统找不到指定的文件“的完美解决方案

一、问题背景 博主正常使用着Intellij IDEA&#xff0c;不知道为什么突然Intellij IDEA报错&#xff0c;错误提示如下&#xff1a; Error:Cannot run program "C:\Program Files\Java\jdk1.8.0_351" 观察Intellij IDEA报错的原因&#xff0c;我们可以知道&#xff1…

语音指令控制坦克大战

前言 本文将介绍一个可以通过语音指令来控制坦克大战游戏的程序&#xff0c;用户只需要添加几个疾病区然后控制坦克进行向上、向下、向左、向右、开火、停止等操作。同时还支持指令微调、提高指令的准确率。 安装项目环境 本项目开发换为&#xff1a; Anaconda 3Windows 11…