原题传送门

题意:给定一个只含小写字母的字符串,假设aeiouyw为元音字母,现在要把一些字母变为大写,要求相同字母的大小写必须相同,统计变化后的字符串中有多少对相邻、同为辅音字母且大小写不一样的字符对,输出能这样的字符对数量最大的字符串。字符串长度≤106。

分析:初读题,106的确吓了我一跳:这道题不像是有线性解法的样子。但只要仔细读题,看到相同字母的大小写必须相同这个条件,就不难发现其实106只是表象,真正有用的是字母——只要枚举字母的大小写情况,字符串多长根本不用在意。当然也不是真的不在意,考虑到相邻的字符对至多只有106种,我们完全可以预处理,将这些字符对的关系存在一个26*26的数组sum里,其中sum[i][j]表示左边为i,右边为j的字符对的数目,这样利用状态压缩(不是状压DP。。),可以在预处理106和主程序226*262的时间复杂度内求解,但是看起来不够?题目已经贴心地为我们准备了大餐——首先有7个元音字母,也就是说枚举的状态不会大于219,这就差不多够了。出题人还生怕卡掉常数大的正解,将时限设为3s。一句话,想出正解没有TLE的理由。

注意几个细节:为了能方便枚举219个状态,建议将26个字符中的辅音字母与0-18进行一一对应,最后输出时再将状态转化回来,这样避免了表面枚举219,实际上枚举226的尴尬。但是这样带来了一个问题(至少对我来说是个问题),那就是对应数组的使用有很多细节要注意,一不留神就会将下标错开一位,导致整个字符串就不对了。

代码

Gym 101612C Consonant Fencity的更多相关文章

  1. 【枚举】Consonant Fencity @upcexam5110

    时间限制: 3 Sec 内存限制: 512 MB 题目描述 There are two kinds of sounds in spoken languages: vowels and consonan ...

  2. Consonant Fencity Gym - 101612C 暴力二进制枚举 Intelligence in Perpendicularia Gym - 101612I 思维

    题意1: 给你一个由小写字母构成的字符串s,你可以其中某些字符变成大写字母.如果s中有字母a,你如果想把a变成大写,那s字符串中的每一个a都要变成A 最后你需要要出来所有的字符对,s[i]和s[i-1 ...

  3. NEERC训练实录

    听说这里可以做一些idea比较好的题.. 那就做做吧 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest A. Auxiliary Proj ...

  4. 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest

    A. Auxiliary Project 完全背包. #include<stdio.h> #include<iostream> #include<string.h> ...

  5. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

  6. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  7. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  8. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  9. Gym 101102J---Divisible Numbers(反推技巧题)

    题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...

随机推荐

  1. Django项目创建02

    Django项目创建(ubuntu环境) 1.    创建项目目录,我是在root下创建了一个workspace文件夹:mkdir workspace  然后cd到该目录下 命令:django-adm ...

  2. .NET 实现Base-64加密解密处理

    .NET 实现Base-64加密解密处理 using System; using System.Collections.Generic; using System.Linq; using System ...

  3. dubbo,eclipse,服务报错

    运行e3-manager报错找不到类,更新了子模块,但e3-manager下没有更新:

  4. ArcGIS API for JavaScript 4.2学习笔记[26] 缓冲区分析【基于geometryEngine工具类】

    要说GIS空间分析最经典的例子,就是缓冲区分析了. 本例使用geometryEngine来绘制缓冲区环.因为官方给的例子有3D和2D场景,所以就会显得比较复杂. 当鼠标在视图上点击时,就会生成一个缓冲 ...

  5. Docker(二):Docker镜像使用

    1.Docker Image介绍 简单来说,Docker Image是用来启动容器的只读模板. Docker Image被划分了三个部分:Remote-dockerhub.com/namespace/ ...

  6. Java设计模式总汇一

    PS:首先我们要带着问题读文章 什么是设计模式 为什么要用设计模式 使用设计模式有什么好处 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让 ...

  7. 用原生实现点击删除点击的li

    简单的实现方式 <!DOCTYPE html> <html> <head> <title></title> <meta charset ...

  8. python (5分钟实现一个游戏的屏蔽敏感字系统,)

    import datetime time=datetime.datetime.now() dirty= ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你',' ...

  9. C++中double类型的数字如何保留三位小数点详解

    我们知道C语言中,如果要求输出结果保留三位小数,我们可以使用pritf()函数轻松的解决.但是C++的输出运算符<<并没有直接实现这个功能,怎么办呢?之前在找答案的过程中各路大神给出了千姿 ...

  10. Q:同时安装了python2和python3的电脑下pip的使用

    本人电脑设置的默认为python3.5的,由于需要,安装了pyhton2.7.之后需要为python2.7使用pip方式安装一个requests模块,但是,在命令行下执行pip install req ...