C. Remove Adjacent(ranting 1600)超详细题解

本文是一篇关于编程挑战C.RemoveAdjacent(ranting1600)的详细解题教程,作者为编程初学者,旨在记录学习过程并帮助其他学习者。文章提供了题目的翻译、解析以及通过的C++代码。问题涉及字符串操作,策略是删除相邻且较小的字符,求最大删除次数。
摘要由CSDN通过智能技术生成

C. Remove Adjacent(ranting 1600)超详细题解



前言

本系列的意义在于两点,一则是作为本人(一个编程初学者)的学习笔记记录,二则希望能对后来者提供一些帮助,因为本人也为新手,难免有些错误或讲述不清之处,恳请大家指出或提出建议,本人也会虚心修改。

本系列的目标是帮助大家解决一些codeforces上,ranting1600+(或者之后会改为1300+,看博主水平吧)的题目


一、题目及翻译

1. 原题(贴图)

0f7703b4478c6823c05f7ae53ad31b9d.png
【戳我跳转到题目】

2. 翻译
  1. 机翻版
    f1fa62954bade5b3e53a8ea8c98e85b4.jpg
  2. 省流版
    对字符串S进行处理,删除其中的字符S[i],这个s[i]相邻的有比它小1的,就可以删除,求最多可以删多少个

二、解析及AC代码

1.解析

首先每次对最大的字母进行尝试删除,因为字符串最长只有100,所以我们每次可以 26 * n 的时间复杂度找到一个可以删除的字母并进行删除,最多只需要删除 n 次,总时间复杂度也就是 26 * n * n,每次只删除一种字母,直到不能删除为止

那么,此时同学们就可以自己去尝试一下了,如果还是不太理解,可以参考下博主下面的AC代码

2.AC代码
#define _CRT_SECURE_NO_WARNINGS 01

#include <iostream>
#include <cstring>
#include <vector>

using namespace std;

typedef long long LL;

const int N = 2e5 + 10, M = 2e5 + 10;

int n, t, k, m;
char s[N];
bool st[N];
vector<int>q[26];

void solve()
{
  int res = 0;
  cin >> n;
  scanf("%s", s);
  for (int i = 25; i > 0; i--)
  {
  	char y = i + 'a', z = i - 1 + 'a';
  	for (int j = 0; j < n; j++)
  	{
  		if (s[j] == y)
  		{
  			int l = j - 1, r = j + 1;
  			while (s[l] == '0' || s[l] == y)
  			{
  				l--;
  			}
  			if (l >= 0)
  			{
  				if (s[l] == z)
  				{
  					res++;
  					s[j] = '0';
  					continue;
  				}
  			}
  			while (s[r] == '0' || s[r] == y)
  			{
  				r++;
  			}
  			if (r < n)
  			{
  				if (s[r] == z)
  				{
  					res++;
  					s[j] = '0';
  				}
  			}
  		}
  	}
  }
  cout << res << endl;
}

int main()
{
  solve();
}

如果觉得有用还请点个赞吧,拜托拜托

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码的作用是从一个 shapefile 文件中读取数据,并根据特定条件筛选出符合要求的站点,然后将结果写入到一个文本文件中。 首先,通过 shapefile 库的 Reader 方法读取指定的 shapefile 文件,并获取字段信息(fields)。接着,使用 enumerate 函数遍历 shapefile 中的每一条记录,并将每条记录转换为字典类型的数据(row),其中字段名作为键,记录值作为值。然后,判断 '7月2日' 字段的值是否大于等于 50,如果满足条件,则将该站点的名称(row['name'])添加到 selected_sites 列表中。 接下来,指定输出文件路径(output_file),并以写入模式打开文件。然后,遍历 selected_sites 列表中的每个站点,并获取其对应的邻近站点(adjacent_site)。如果邻近站点存在,则设置邻近字段为 '7月2日',并初始化计数器 count 为 0。然后,再次遍历 shapefile 中的每条记录,如果记录的名称与邻近站点相同,并且对应字段的值大于等于 50,则增加计数器 count 的值。最后,使用文件对象的 write 方法将站点、邻近站点和计数器的值以逗号分隔的形式写入文件。 请注意,代码中的变量 zhandian_data 并未在给出的代码片段中定义,你可能需要提供该变量的定义或者确认其来源。另外,注意在文件写入操作时,应该将写入操作放在文件的 with 语句块内,以确保文件的正确关闭。 如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值