4261. 孤独的照片

2023-11-16

数据范围为500,000,所以应该控制在O(nlogn)或O(n)

我们发现要枚举的子串它其中有一个字母只出现一次,所以,我们可以去枚举只出现一次的字母是哪个,假设在第i个位置的字母为G,我们要枚举包含这个字母的,且只包含一个G的,且长度大于等于3的子串的数量,依次统计每个位置,然后累加起来就是答案。

每个字符串只出现一次的字母有且只有一个,因此,这样统计出的答案是不重不漏的。

每一个满足要求的字符串它一定只包含一个只出现一次的字母,所以,我们枚举只出现一次的字母就可以不重不漏的涵盖每一个要统计的答案。

当我们只出现一次的字母确定后,如何快速统计出来包含这个字母的,满足要求的子串的个数?

为了方便统计,我们可以预处理出来G左边有多少个连续的H,右边有多少个连续的H,然后分情况计数,

① 假设左右两边至少包含一个H,左边可以包含1-L个H,右边可以包含1-R个H,根据乘法原理,共L * R个

② 左边没有H,则右边至少包含两个H,即2. 3. .... R,共R - 1个

③ 右边没有H,则左边至少包含两个H,即2. 3. .... L,共L - 1个

答案即为三种情况相加,时间复杂度为O(n)

注意:由于中间涉及到乘法,所以答案可能会爆int,所以开个long long(^_^)

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long LL;

const int N = 5e5 + 10;

int n;
int l[N], r[N];
char s[N];

int main()
{
    scanf("%d", &n);
    scanf("%s", s);
    
    for (int i = 0, h = 0, g = 0; i < n; ++ i)
    {
        if (s[i] == 'G') l[i] = h, h = 0, g ++;
        else l[i] = g, g = 0, h ++;
    }
    
    for (int i = n - 1, h = 0, g = 0; i >= 0; -- i)
    {
        if (s[i] == 'G') r[i] = h, h = 0, g ++;
        else r[i] = g, g = 0, h ++;
    }
    
    LL res = 0;
    for (int i = 0; i < n; ++ i)
    {
        res += (LL) l[i] * r[i] + max(l[i] - 1, 0) + max(r[i] - 1, 0);
    }
    
    printf("%lld\n", res);
    
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4261. 孤独的照片 的相关文章

  • 如何从更高级别启动用户级别的 Exe

    我希望一个进程始终在用户级别运行 当它由以管理员级别运行的安装程序 自定义 而不是 msi 启动时 或者当用户登录时 环顾四周 我不确定这是否可能 最简单的方法是有 2 个进程 一种是普通用户 它启动提升 管理进程 然后管理进程可以使用 I
  • Excel的解析路径

    其实我想问以下问题 对于位于 目录中定义的 PATH 怎么能 我找出这些目录中的哪个 找到了 因为我需要使用 Process Run 从 C 运行 Excel 并且只需指示 Excel 即可正常工作 Windows 似乎知道在哪里可以找到它
  • C 语言中的套接字如何工作?

    我对 C 中的套接字编程有点困惑 You create a socket bind it to an interface and an IP address and get it to listen I found a couple of
  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • MigraDoc 项目符号列表(漏洞)

    在我的解决方案中 我在 PDF 文件中使用项目符号列表 它看起来像这样 Solcellepaneler kr ver hverken autoriseret service eller tidskr vende vedligehold So
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 如何从 webmethod 向 AJAX 调用返回异常?

    我回来了List
  • 如何正确实现带有 close 方法的处置模式(CA1063)

    框架设计指南 第二版 第 327 页 说 考虑提供方法Close 除了Dispose 如果接近 是该领域的标准术语 这样做时 重要的是使 Close 实现与Dispose并考虑实施IDisposable Dispose方法明确 因此 按照提
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 用于轻松动态反射的 C# 库

    是否有任何库 例如开源项目等 可以更轻松地使用复杂的反射 例如动态创建对象或类 检查实例等 Thanks 有一个LinFu http www codeproject com KB cs LinFuPart1 aspx可用的库除了反射之外还可
  • Apple IOS 上的 C# 应用程序 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有基于 C Net 的应用程序 有什么方法可以在 Apple IOS 上运行这些应用程序吗 我没有资
  • C# While 循环与 For 循环?

    在 C 中 一个问题已经困扰我一段时间了 它的 While 和 For 循环之间的实际主要区别是什么 它只是纯粹的可读性吗 在 for 循环中本质上可以做的所有事情都可以在 while 循环中完成 只是在不同的地方 举这些例子 int nu
  • 使用 c# 中的 c++ ref 中的引用从 C# 调用 C++ 代码错误

    所以在我的 c dll 文件中我得到了以下函数 DLL void GetUserPass char userName char passWord userName ceva passWord altceva 现在我想从 c 调用它 但它给了
  • 为什么C++中没有“NULL引用”?

    我正在阅读 C 常见问题解答 8 6 什么时候应该使用引用 什么时候应该使用指针 http www parashift com c faq lite refs vs ptrs html 特别是以下声明 可以时使用引用 必要时使用指针 上述情
  • 如何使用 HttpClient 验证 Pardot API

    我花了大约一天的时间尝试对 Pardot API 进行身份验证 它不喜欢我尝试发布消息正文的方式 所以我想发布对我有用的解决方案 如果您有任何建议或替代方案 我想听听 ServicePointManager SecurityProtocol
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in

随机推荐

  • 报错解决:SyntaxError: Non-UTF-8 code starting with ‘\xe7‘

    今天抓取数据时使用re对数据进行提取时遇到的问题 syntaxError Non UTF 8 code starting with xe7 意思是有的中文字符无法转成utf 8的形式 如图所示 这个是因为抓取的数据中有的中文字符识别不了 相
  • 深入理解 Spring 控制反转与依赖注入

    概览 对于 Spring 框架来说 控制反转 Inversion of Control IoC 和依赖注入 Dependency Injection DI 是个等同的概念 控制反转是通过依赖注入实现的 在这篇文章中 我们会详细介绍 IoC
  • 使用VS Code静态检查Android C/C++代码(clangd插件)

    前言 在前文使用VS Code更好的编写Android C C 代码 C C 插件 中主要介绍了如何更好的写代码 本文要探讨的是从 好写 到 写好 的问题 如何做静态代码检查 在查找资料中发现了Cppcheck和Clang Tidy等工具
  • 学位房如何查询学位真实性和户口是否被占用

    查户口有没占用 需要业主带上身份证 房产证去公安局户籍窗口查 他会口头告诉你这个地址的户口有没有人 不会出书面的东西 所以一定要听清楚 其实你和业主签三方合同的时候可以注明户口这方面的东西 比如多少号之前要迁走之类的 拿着房产证去公安局查户
  • JDBC连接MySQL8.0案例详解

    JDBC本质上是一个介于应用程序和数据库之间的公共接口 通过对这个接口的实现 我们可以建立应用程序和数据库之间的连接 便捷的访问数据库数据 不同版本的MySQL连接的参数是有一些小差别的 以下内容基于一个JDBC连接案例讲解连接数据库的过程
  • 图像分类如何得到每一类的预测概率?(结合python代码)

    要得到每一类的预测概率 首先通过torch eq判断每个图片预测的准不准确 循环每个预测结果 得到没个结果对应的标签 如果准确 在该标签类的正确数量加一 在该类的总的数量加一 最后输出该类正确的数量除以该类总的数量就得到了该类的预测概率了
  • NoClassDefFoundError产生原因,及解决办法

    目录 一 NoClassDefFoundError产生原因 二 NoClassDefFoundError 解决方法 三 实战训练 NoClassDefFoundError 是 Java 的一个运行时异常 表示在运行时无法找到某个类的定义 尽
  • 【xenclient】 使用小结 -- ubuntu的千百bug

    说道多系统 不能不提下ubuntu 以前redhat似乎是linux的领头羊 但在桌面领域 跟windows还是差得太远 在linux最弱的桌面特性上 ubuntu算是第一个以桌面特效全面超越windows的系统了 因此我的系统 除了保留做
  • Building Simulation Packet-Loss System in Channel

    Step 1 Produce a series of random frame numbers There is three input GOP and loss ratio For instance there is a 264 with
  • json文件怎么写注释

    1 使用编辑器打开json文件 现在是没有注释内容的 如果没有的话需要下载安装 2 一个json文件 其实就是一个js脚本文件 我们可以使用 的单行注释符 3 也可以使用 符号来支持多行注释 4 我们可以使用重复定义的方法来添加注释 jso
  • 微信小程序:分享一个百度地图微信小程序api

    分享一个百度地图微信小程序api http lbsyun baidu com index php title wxjsapi 使用也比较简单 天气就是以前车辆网的api 支持https 免费 支持POI查询 默认返回生活服务 美食 酒店三种
  • 柯洁终结神秘AI棋手41连胜 表示信心大增今夜未眠

    大型年度AI人物评选 2017中国AI英雄风云榜 评选进行中 奖项设置 技术创新人物TOP 10 商业创新人物TOP 10 表彰人物 华人科学家 学者 企业家 创业者 评委阵容 资深媒体人 AI投资人 AI专业机构等 颁奖 2017年12月
  • selenium官文文档阅读总结(day 3)

    1 关联型xpath的用法 driver find element By XPATH a text xxx ancestor 祖先元素的标签名 2 selenium等待 等待的作用 在系统运行的过程中 等待网页内容的加载显示 需要耗费的时间
  • 华为校招机试 - 工单调度策略(Java)

    题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 华为工单调度系统需要根据不同的策略 调度外线工程师 FME 上站修复工单对应的问题 根据与运营商签订的合同 不同严重程度的工单被处理并修复的时长要求不同 这个要求被修复的时长我们
  • 使用Go语言爬取网页并将其保存为图片

    要使用Go语言爬取网页并将其保存为图片 你可以使用Go的第三方库来实现 以下是一个使用chromedp库的示例代码 它使用Chrome浏览器的Headless模式来访问网页并截取屏幕截图 package main import contex
  • Mrtk 如何动态开启关闭网格渲染

    protected void Show IMixedRealityDataProviderAccess dataProviderAccess CoreServices SpatialAwarenessSystem as IMixedReal
  • Unity编辑器随机生成物体,更换场景之后物体丢失问题解决

    前言 obj GameObject PrefabUtility InstantiatePrefab configData bigMainScene 我在编辑器开发的时候实例化预制体到场景中之后 在跳转场景之后 然后在返回实例化过物体的场景会
  • 【Ansible自动化运维实战】使用Asible批量部署yum仓库

    Ansible自动化运维实战 使用Asible批量部署yum仓库 一 时间要求及目的 二 playbook内容 三 运行palybook 一 时间要求及目的 使用华为镜像源作为yum仓库批量分发达到所有受控端 二 playbook内容 ro
  • 【成电860考研】电子科技大学软件工程860考研专业课真题考频总结

    博主最近考研上岸啦 成电软件工程860专业课考了122 总分不高 这篇文章主要介绍专业课 我就不分享别的啦 博主考研的时候收集了几乎全网的资料 找到了几乎所有能找到的860资料进行汇总分析 得到了最后的真题考频 为了帮助学弟学妹们 博主决定
  • 4261. 孤独的照片

    数据范围为500 000 所以应该控制在O nlogn 或O n 我们发现要枚举的子串它其中有一个字母只出现一次 所以 我们可以去枚举只出现一次的字母是哪个 假设在第i个位置的字母为G 我们要枚举包含这个字母的 且只包含一个G的 且长度大于