【hihoCoder】#1039 : 字符消除 by C solution
#1039 : 字符消除
描述
小Hi最近在玩一个字符消除游戏。给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的:
1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串。例如"ABCCBCCCAA"中"CC","CCC"和"AA"会被同时消除,余下"AB"和"B"拼成新的字符串"ABB"。
2)上述消除会反复一轮一轮进行,直到新的字符串不包含相邻的相同字符为止。例如”ABCCBCCCAA”经过一轮消除得到"ABB",再经过一轮消除得到"A"
游戏中的每一关小Hi都会面对一个字符串s。在消除开始前小Hi有机会在s中任意位置(第一个字符之前、最后一个字符之后以及相邻两个字符之间)插入任意一个字符('A','B'或者'C'),得到字符串t。t经过一系列消除后,小Hi的得分是消除掉的字符的总数。
请帮助小Hi计算要如何插入字符,才能获得最高得分。
输入
输入第一行是一个整数T(1<=T<=100),代表测试数据的数量。
之后T行每行一个由'A''B''C'组成的字符串s,长度不超过100。
输出
对于每一行输入的字符串,输出小Hi最高能得到的分数。
提示
第一组数据:在"ABCBCCCAA"的第2个字符后插入'C'得到"ABCCBCCCAA",消除后得到"A",总共消除9个字符(包括插入的'C')。
第二组数据:"AAA"插入'A'得到"AAAA",消除后得到"",总共消除4个字符。
第三组数据:无论是插入字符后得到"AABC","ABBC"还是"ABCC"都最多消除2个字符。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* insert(char* s, int i, char a)
{
char* s_result = (char*)malloc(sizeof(char)*(strlen(s) + ));
strcpy(s_result, s);
for (int j = strlen(s) + ; j>i; j--)
{
s_result[j] = s_result[j - ];
}
s_result[i] = a;
return s_result;
}
int traversal(char* s)
{
if (strlen(s) == )
return ;
char* s1 = (char*)malloc(sizeof(char)*(strlen(s)+));
int result = ;
int i = , temp = ;
int flag = ;
int j = ;
for (j = ; j<strlen(s) - ; j++)
{
if (s[j] != s[j + ] && temp != s[j])
{
s1[i++] = s[j];
temp = ;
}
else
{
flag = ;
temp = s[j];
}
}
if (s[j] != s[j - ])
{
s1[i++] = s[j];
}
s1[i] = '\0';
if (flag == )
return i;
result = traversal(s1);
return result;
}
int main()
{
//freopen("E:\\test.txt","r",stdin);
int t = ;
int temp = ;
char insert_char = ;
scanf("%d", &t);
getchar();
char** array = (char**)malloc(sizeof(char*)*t);
for (int i = ; i<t; i++)
{
int result = ;
array[i] = (char*)malloc(sizeof(char)* );
gets(array[i]);
char* s_result = (char*)malloc(sizeof(char)*(strlen(array[i]) + ));
if (traversal(array[i]) == )
printf("%d\n", strlen(array[i]) + );
else if (traversal(array[i]) == strlen(array[i]))
printf("2\n");
else
{
insert_char = 'A';
for (int j = ; j <= strlen(array[i]); j++)
{
s_result = insert(array[i], j, insert_char);
temp = traversal(s_result);
if (result > temp)
{
result = temp;
}
}
insert_char = 'B';
for (int j = ; j <= strlen(array[i]); j++)
{
s_result = insert(array[i], j, insert_char);
temp = traversal(s_result);
if (result > temp)
{
result = temp;
}
}
insert_char = 'C';
for (int j = ; j <= strlen(array[i]); j++)
{
s_result = insert(array[i], j, insert_char);
temp = traversal(s_result);
if (result > temp)
{
result = temp;
}
}
printf("%d\n", strlen(array[i]) - result + );
}
}
return ;
}
问题:
使用Visual Studio编译运行样例结果正确,但是提交代码通过G++运行会出现Wrong Answer,若知道原因的话还望请留言告知!
【hihoCoder】#1039 : 字符消除 by C solution的更多相关文章
- hihoCoder 1039:字符消除(字符串处理)
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- hihocoder #1039 : 字符消除 ( 字符串处理类 ) 好久之前做的题目,具体的算法代码中阅读吧
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- [hihoCoder]#1039 : 字符消除
Description 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些 ...
- hihoCoder 1039 字符消除 最详细的解题报告
题目来源:字符消除 解题思路: 1.在给定字符串中的任意位置插入'A'.'B'.'C'中的任意一个字符,然后计算插入后的字符经过消除后最短的字符串长度: 2.在计算字符消除后最短长度时,智能一遍一遍的 ...
- hihoCoder 1039字符消除 (字符串处理)
http://hihocoder.com/problemset/problem/1039 因为字符串只由3种字母组成,并且插入的字符也只能是这三种字符的其中一个,那么可以考虑枚举这三个字符其中一个字符 ...
- 【hihoCoder】1039 : 字符消除
题目:http://hihocoder.com/problemset/problem/1039 给定一个字符串s,只包含'A', 'B', 'C'三种字符 1. 向 s 的任意位置 (包括头和尾) 中 ...
- 【hihocoder 1039 字符串消除】模拟
题目链接:http://hihocoder.com/problemset/problem/1039 题意:给定一个只由{A, B, C}组成的字符串s,长度为n, 故包含n+1个空隙:现要求在某个空隙 ...
- 【HIHOCODER 1039】 字符消除
链接 问题描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被 ...
- hihoCoder#1039
刚开始学习C语言,准备在做hiho的题目的过程中来学习,在此进行记录,如果代码中有错误或者不当的地方还请指正. 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在 ...
随机推荐
- Spring - BeanPostProcessor接口(后处理器)讲解
概述: BeanPostProcessor接口是众多Spring提供给开发者的bean生命周期内自定义逻辑拓展接口中的一个,其他还有类似InitializingBean,DisposableBean, ...
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/***]]
问题描述:Tomcat容器和Eclipse启动运行时候报错 Failed to start component [StandardEngine[Catalina].StandardHost[local ...
- iOS开发之UITableView中计时器的几种实现方式(NSTimer、DispatchSource、CADisplayLink)
最近工作比较忙,但是还是出来更新博客了.今天博客中所涉及的内容并不复杂,都是一些平时常见的一些问题,通过这篇博客算是对UITableView中使用定时器的几种方式进行总结.本篇博客会给出在TableV ...
- [js学习笔记] 原型链理解
js中只有对象,包括对象,函数,常量等. prototype 只有函数里有这个属性. 对象里可以设置这个属性,但是没这个属性的意义 prototype指向一个对象,可以添加想要的方法. 该对象里有一个 ...
- Bootstrap——一款超好用的前端框架
前 言 Bootstrap Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,用于开发响应式布局.移动设备优先的 WEB 项目.Bootstrap在JQuery的基础上进 ...
- 回文词_KEY
回文词 (palin.pas/c/cpp) [问题描述] 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得的结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个 ...
- 再探Spring IOC
这次做了提纲 下面再来一个case study case描述: 这是工具类 //bean的配置信息略去 class MyUtil{ private static UserDao userDao; p ...
- 51nod 1270 数组的最大代价 思路:简单动态规划
这题是看起来很复杂,但是换个思路就简单了的题目. 首先每个点要么取b[i],要么取1,因为取中间值毫无意义,不能增加最大代价S. 用一个二维数组做动态规划就很简单了. dp[i][0]表示第i个点取1 ...
- oracle排序的几种方法
1.创建数据库表 CREATE TABLE USER_INFO( USERID VARCHAR2(10 BYTE) NOT NULL, USERNAME ...
- HDU1423 LCIS
1,先离散化,然后DP: 注意这个解法中,dp[i][j][k]代表a序列中前i个和b序列中前j个数结尾为k或小于k时的最大. 但是由于i是单增(一次1->n),而j反复变化(多次1->m ...