A - No Majority(DP 动态规划)[AtCoder Grand Contest 060]

news2024/11/24 16:49:59

题目如下:

在这里插入图片描述

思路 or 题解:

对于一个子串, 如果长度为 l e n len len, 如果该子串中任意一个字符的出现个数 大于 l e n 2 \frac{len}{2} 2len 那该字符串为 U n g o o d Ungood Ungood
反之,如果任意子串, 长度设为 l e n len len, 如果该子串中任意一个字符的出现个数 小于等于 l e n 2 \frac{len}{2} 2len, 那该字符串为 G o o d Good Good

核心:
如果一个子串有字符超过一半,那肯定可以找到一个长度 ≤ 3 \le3 3 的子串满足字符超过一半。

我们可以用 DP(动态规划) 的思想去写
d p [ i ] [ j ] [ k ] dp[i][j][k] dp[i][j][k], i i i位置, i i i位置字符为 j j j i − 1 i-1 i1位置字符为 k k k 的合法方案数。

转移:
判断合法,如果合法:
d p [ i ] [ j ] [ k ] = ( d p [ i ] [ j ] [ k ] + d p [ i − 1 ] [ k ] [ z ] ) dp[i][j][k] = (dp[i][j][k] + dp[i - 1][k][z]) dp[i][j][k]=(dp[i][j][k]+dp[i1][k][z])

时间复杂度: O ( n × 2 6 3 ) O(n \times 26^3) O(n×263)

AC 代码如下:

const int mod = 998244353;
const int inf = 2147483647;
const int N = 5009;
int n;
char s[N];
int dp[N][27][27];
bool check(int a, char aa, int b, char bb)
{
    if ((aa != '?' && aa - 'a' != a) || (bb != '?' && bb - 'a' != b))
        return false;
    return true;
}
bool check2(int a, int b, int c)
{
    if (a == b || a == c || b == c)
        return false;
    return true;
}
void solve()
{
    cin >> n;
    cin >> s + 1;
    for (int i = 0; i < 26; i++)
        for (int j = 0; j < 26; j++)
            if (i != j && check(i, s[2], j, s[1]))
                dp[2][i][j] = 1;
        
    for (int i = 3; i <= n; i++)
        for (int j = 0; j < 26; j++)
            for (int k = 0; k < 26; k++)
                for (int z = 0; z < 26; z++)
                {
                    if (!check(j, s[i], k, s[i - 1]) || !check2(j, k, z))
                        continue;
                    dp[i][j][k] = (dp[i][j][k] + dp[i - 1][k][z]) % mod;
                }

    int ans = 0;
    for (int i = 0; i < 26; i++)
        for (int j = 0; j < 26; j++)
            ans = (ans + dp[n][i][j]) % mod;
    cout << ans << '\n';
}
int main()
{
    buff;
    solve();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Map接口-HashMap、Hashtable和Properties

1.Map 接口和常用方法 1.1Map 接口实现类的特点 [很实用] 注意:这里讲的是JDK8的Map接口特点 1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value。 Map 中的key 和 value可以是任何引用类型的数据&#xff0c;会封装到HashMap$Node对象中。&#xff08;Node…

公网远程连接内网MySQL数据库【内网穿透】

作为网站运行必备组件之一的数据库&#xff0c;免不了随时对其进行管理维护。若我们没有在安装数据库的电脑旁&#xff0c;但又需要立即对数据库进行管理时&#xff0c;应该如何处理&#xff1f;这时我们可以使用cpolar对内网进行穿透&#xff0c;远程管理和操作MySQL数据库。现…

javaee之spring3

模拟一个银行转账事务 先来看一下基础文件 先来看这个spring中的bean.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XML…

Dragonfly 和 Nydus Mirror 模式集成实践

文&#xff5c;戚文博 &#xff08;花名&#xff1a;百蓦&#xff09; Dragonfly Maintainer蚂蚁集团软件工程师 主要负责「基于 P2P 的文件以及镜像加速系统」。 本文 2175 字 阅读 15 分钟 PART. 1 背景 自 17 年开源以来&#xff0c;Dragonfly 被许多大规模互联网公司选…

C++贪吃蛇游戏开发实践

C贪吃蛇游戏开发实践 对象分析 我们首先需要确定一个像素点组成的地图&#xff08;画布&#xff09;&#xff0c;要确定行数、列数和像素点大小。这个地图上将会有两个对象&#xff1a;蛇和食物。 蛇由头和身子组成&#xff0c;他们都有自己的位置&#xff0c;所以考虑使用位置…

移动端测试必备技能: adb命令和抓包

移动端测试 是指对移动应用进行的测试&#xff0c;即实体的特性满足需求的程度&#xff0c;进行测试前需要搭建测试环境。 1 移动端自动化环境搭建 1.1 java安装 java JDK 安装jdk-8u181-windows-x64.exe 配置环境变量&#xff1a; JAVA_HOME&#xff1a;D:\developer to…

基于C#+SqlServer开发(WinForm)学生宿舍管理系统【100010056】

学生宿舍管理系统 一、前言 学生宿合是学生们最为熟悉的领域&#xff0c;假定学校有若干栋宿会楼&#xff0c;每栋宿合楼有若干层&#xff0c;每层有若干个寝室&#xff0c;每个寝室可住若干个学生。以往的手工操作已经不能适应现在办公的需要.为了摆脱繁琐的劳动,提高工作效…

HTML XHTML HTML5区别

文章目录HTML & XHTML & HTML5区别HTMLXHTMLHTML5区别HTML & XHTML & HTML5区别 HTML HTML&#xff0c;全称“HyperText Mark-up Language&#xff08;超文本标记语言&#xff09;”&#xff0c;它是构成网页文档的主要语言。我们常说的HTML&#xff0c;指的…

金融服务机构提高移动应用程序安全性的 3 种方式

金融移动应用程序的使用正在迅速加速&#xff0c; 2020 年用户会话数量增长了 49% 。VMware报告称&#xff0c;金融应用程序的网络攻击在同年也增长了 118%。 Intertrust的另一份报告显示&#xff0c;77% 的金融服务应用程序至少包含一个可能导致数据泄露的安全漏洞。最近发现…

【Three.js入门】纹理加载进度、环境贴图、经纬线映射贴图与高动态范围成像HDR

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

VMwareLinux详细安装步骤

一、VmWare虚拟机的安装 目录 一、VmWare虚拟机的安装 1、安装虚拟机 二、在虚拟机上安装CentOS 1、创建新虚拟机 2、选择典型→ 下一步 3、选择稍后安装操作系统 4、选择操作系统和版本 5、输入虚拟机名称和安装路径 6、设置磁盘大小 7、选择CentOS安装镜像文件 8、…

射线检测中的像质计

像质计&#xff0c;透度计 Image Quality Indicators&#xff0c;Penetrameters 分类&#xff1a;线型像质计、阶梯孔型像质计、平板孔型像质计、双丝型像质计。 前三种像质计的作用&#xff1a;测定检测图像的厚度&#xff08;密度&#xff09;对比度&#xff1b; 后一种像质…

数论专题(1)数论函数,整数分块

从今天起,我们将要开始数论的学习,是不是感觉很难?难的话就听我讲吧,讲了后就不难了(bushi) 数论函数定义 (数论函数) 数论函数的定义:在全体正整数&#xff08;或者整数&#xff09;上定义的函数称作数论函数。 积性的定义&#xff1a;若 gcd(a,b)1,则f(ab)f(a)f(b)。举个栗…

适合制造业的ERP系统有哪些? 制造业的ERP对企业有什么作用?

在当前的激烈的市场竞争下&#xff0c;制造企业如果想要长期稳定地发展&#xff0c;除了需要把外部因素做好把控&#xff0c;还需要提升企业自身的管理水平&#xff0c;来提高自己的竞争力&#xff0c;而信息化是企业发展的必经之路。 适合制造业的ERP系统在企业管理中起到了至…

《Science》教你如何写好一篇博士毕业论文!

博士生涯的完美结束少不了一篇优秀的毕业论文。但是说起来容易&#xff0c;写起来有时让人痛不欲生。不仅内容多&#xff0c;还需要用严谨的逻辑把章节联系起来&#xff0c;常常耗时耗力。而且博士论文要的不仅仅是学术工作的质量&#xff0c;如何将这些工作合理、完整地呈现也…

基于Java实现(PC)大学班级事务管理系统【100010059】

大学班级事务管理系统 要求 本次设计要求利用 Java 实现 C/S 模式的大学班级内日常事务管理系统&#xff08;PC 版&#xff0c;应用于校内网有线网络访问&#xff0c;暂不开发移动端&#xff09;&#xff0c;不得依赖现有的建模框架&#xff0c;使用 swings 技术完成如下基本…

IP地址分类及范围详解

IP地址分为公网IP地址&#xff08;合法IP地址&#xff09;和私有IP地址 公网IP地址主要应用于Internet上的主机访问&#xff0c;而私有IP地址应用于局域网中计算机的相互通信。 IP地址的表示形式&#xff1a;分为二进制表示和点分十进制表示。现在使用的IP地址长度均为32位/4个…

阿里云oss访问图片出现跨域问题

需要服务器端支持&#xff0c;开一下cdn Access-Control-Allow-Origin字段是服务端添加了才有的&#xff0c;前端加了crossOrigin"anonymous"是想跨域获取这张图片&#xff0c;好用在canvas.toDataURL()上&#xff0c;但是服务端不一定同意&#xff0c;服务端添加了…

开始摸索学习go,具体内容和过程就慢慢补充吧。

计划学习路线 文章目录计划学习路线书籍开源项目资料网站课程书籍 《go语言核心编程》 -腾讯作者 《go语言编程之旅》 -5个项目 --对go语言能做的内容做了整体介绍吧&#xff0c;对细节还不够细化&#xff0c;对独立编写代码帮助有限 第二章 swaage 有版本冲突&#xff0c;等…

37.卷积神经网络(LeNet)的代码实现(在colab上)

ps&#xff1a;在教材上直接打开colab&#xff0c;运行原来的代码!pip install githttps://github.com/d2l-ai/d2l-zhrelease # installing d2l是会报错的&#xff0c;改成这句代码&#xff0c;可以正确运行&#xff1a;!pip install d2l0.14.&#xff0c;直接制定了d2l的版本 …