题目链接:https://vjudge.net/problem/FZU-1989

 Problem 1989 AntiAC

Accept: 79    Submit: 399
Time Limit: 4000 mSec    Memory Limit : 32768 KB

 Problem Description

Usually, in programming contests all you wait is “AC” (abbreviation of AekdyCoin).We find that boring.

In this task we do the opposite. We will give you a string consists of only uppercase letters. You should remove some letters so that there is no “AC” in the result string. Return the result string with the longest length. If there is more than one string with the longest length, return lexicographically smallest one.

 Input

In the first line there is an integer T, indicates the number of test cases. (T <= 100).In each case, there contains one string. The length of string is no longer than 10000.

 Output

For each case, output “Case idx: “ first where idx is the index of the test case start from 1, then output the result string.

 Sample Input

3
A
ACA
ACBWCA

 Sample Output

Case 1: A
Case 2: AA
Case 3: ABWCA

 Source

 FOJ有奖月赛-2010年11月

题意:

给出一个只含大小字母的字符串,求删除最少的字符,使得字符串里面不含有“AC”子串,如果有多个答案,求出字典序最小。

题解:

1.可知,对于答案有影响的,只有“AACCCACAAAACACA……”以A为开始,迭代若干次,然后又到C迭代若干次,一直重复,直到不再出现A或C。

2.为了方便操作,将:“AACCCACAAAACACA……”串缩成“ACACAC……”串,即每个字符中都有一个权值,代表其里面有多少个字符。可知,要使得“ACACAC……”最终不含有“AC”,那么它的最终形式只能为“CA”,其中C、A都有各自的权值,代表其出现次数。

3.根据第2点,只需对每个“AACCCACAAAACACA……”缩成“ACACAC……”,然后每个枚举每个C的位置,前面全部为C,后面全部为A,取两者之和的最大值,即为最终的“CA”段。

代码如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
using namespace std;
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int MOD = 1e9+;
const int MAXN = 1e5; char s[MAXN], ans[MAXN];
int sum[MAXN], t1[MAXN], t2[MAXN];
int main()
{
int T, kase = ;
scanf("%d", &T);
while(T--)
{
scanf("%s", s);
int A = , C = , tot = ;
for(int i = ; s[i]; i++)
{
if(s[i]!='A') //把对答案没影响的先存起来
{
ans[tot++] = s[i];
continue;
} int cnt = ;
while(s[i]=='A') //找出ACACAC段,并统计个数
{
A = C = ;
while(s[i]=='A') A++, i++;
while(s[i]=='C') C++, i++;
sum[++cnt] = A;
sum[++cnt] = C;
} t1[] = ; //求C的前缀和
for(int j = ; j<=cnt; j+=)
t1[j] = t1[j-]+sum[j];
t2[cnt+] = ; //求A的后缀和
for(int j = cnt-; j>=; j-=)
t2[j] = t2[j+]+sum[j]; int len = , lenc = ;
for(int j = ; j<=cnt; j += ) //枚举每个C的位置,使得前面全为C,后面全为A,取最大长度
{
if(t1[j]+t2[j+]>len)
{
len = t1[j]+t2[j+];
lenc = t1[j];
}
}
//求最长的"CA"串:
for(int j = ; j<lenc; j++) //得到C和A各自的长度后,放到答案串里面。
ans[tot++] = 'C';
for(int j = ; j<len-lenc; j++)
ans[tot++] = 'A';
ans[tot++] = s[i]; //由于最后一个字符即不是'A'也不是'C',所以才会退出循环,因此把它补上,否则会有遗漏。
}
ans[tot] = ; //注意在答案结尾加上结束符。 printf("Case %d: ", ++kase);
puts(ans);
}
}

FZU1989 AntiAC —— 字符串的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  3. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  4. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

  7. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  8. Javascript正则对象方法与字符串正则方法总结

    正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...

  9. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

随机推荐

  1. Shell脚本部分语法

    Shell中的变量   Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量 系统变量:$HOME.$PWD.$SHELL.$USER等等 显示当前sh ...

  2. 【前端GUI】——对一些优秀网页设计作品的分析&心得

    前言:优秀的网站设计作品都有一些相似的地方,即使是美学,也一定会遵循着一定的规律. ONE 这一组,属于同类. 主题:点心. 背景:卡通动物形象. 色调:柔和,甜美. 点线面布局: 在这两个页面中,点 ...

  3. Putty的噩梦——渗透工具PuttyRider使用心得分享

    我们在入侵到一台主机的时候,经常会看到管理员的桌面会放着putty.exe,这说明有很大的可能性管理员是使用putty远程管理主机的. 该工具主要是针对SSH客户端putty的利用,采用DLL注入的方 ...

  4. 【Python】ModuleNotFoundError: No module named 'matplotlib.pyplot'

    安装好matplotlib后,很激动的建立了一个文件夹matplotlib,并且在其下面建立了,mpl_squraes.py文件,代码编辑完成以后,点击运行,报错如下: 仔细分析了之后,发现是文件夹名 ...

  5. SpringBoot学习之常用注解

    @SpringBootAppliaction:通常注解写在SpringBoot启动类中,主要包括三个作用: 1.@Configuration表示将该类作用springboot配置文件类. 2.@Ena ...

  6. 点击出现黑色背景的解决:-webkit-tap-highlight-color:rgba(0,0,0,0)

    在手机上(iphone)点击按钮的时候,屏幕总会闪动一下,这让页面看起来很不友好也不流畅.解决方案加了一句css就解决了: -webkit-tap-highlight-color:rgba(0,0,0 ...

  7. python for android : BeautifulSoup 有 bug

    BeautifulSoup 善于网页数据分析 .可是 python for android : BeautifulSoup 有 bug , text = h4.a.text 仅仅能取得 None,因此 ...

  8. Redis系列-存储篇list主要操作函数小结(转)

    在总结list之前,先要弄明白几个跟list相关的概念: 列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出. 表头元素:列表最左端第一个元素. 表尾元素:列表最右端的 ...

  9. 浏览器前缀-----[译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序

    Autoprefixer解析CSS文件并且添加浏览器前缀到CSS规则里,使用Can I Use的数据来决定哪些前缀是需要的.   所有你需要做的就是把它添加到你的资源构建工具(例如 Grunt)并且可 ...

  10. EF获取DbContext中已注册的所有实体类型

    /// <summary> /// 获取DbContext中已注册的实体类型 /// </summary> /// <typeparam name="T&quo ...