hiho一下:Beautiful String

记不清这是 hiho一下第几周的题目了,题目不难,不过对于练习编程,训练思维很有帮助。况且当时笔者处于学习算法的早期,
所以也希望刚接触算法的同学能多去练习一下。

题目介绍

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
We say a string is beautiful if it has the equal amount of 3 or more continuous letters (in increasing order.)
Here are some example of valid beautiful strings: “abc”, “cde”, “aabbcc”, “aaabbbccc”.
Here are some example of invalid beautiful strings: “abd”, “cba”, “aabbc”, “zab”.
Given a string of alphabets containing only lowercase alphabets (a-z), output “YES” if the string contains a
beautiful sub-string, otherwise output “NO”.
输入
The first line contains an integer number between 1 and 10, indicating how many test cases are followed.
For each test case: First line is the number of letters in the string; Second line is the string. String length
is less than 10MB.
输出
For each test case, output a single line “YES”/”NO” to tell if the string contains a beautiful sub-string.

其实网站上面的题目分析写得很好了(还有翻译),要去看的,点击这里。

AC 源码

 1	#include <stdio.h>
2
3 struct chnum
4 {
5 char c;
6 int n;
7 };
8
9 struct chnum *col (int l, char s[])
10 {
11 int i, j = 0;
12 int len = l;
13 struct chnum cn[len];
14
15 cn[0].c = s[0];
16 cn[0].n = 1;
17
18 for (i=1; i<len; i++)
19 {
20 char t = s[i];
21
22 if (t != s[i-1])
23 {
24 j++;
25 cn[j].c = s[i];
26 cn[j].n = 1;
27 }
28 else
29 cn[j].n++;
30 }
31
32 if (j < len - 1)
33 {
34 cn[++j].c = ' ';
35 }
36
37 return cn;
38 }
39
40 int check (struct chnum *cn, int len)
41 {
42 for (int i=1; i<=len-2; i++)
43 {
44 if ((cn->c + 1 == (cn+1)->c
45 && (cn+1)->c + 1 == (cn+2)->c)
46 && (cn->n >= (cn+ 大专栏  hiho一下:Beautiful String1)->n
47 && (cn+1)->n <= (cn+2)->n)
48 )
49 return 0;
50 else if (cn->c == ' ')
51 break;
52 else
53 cn++;
54 }
55
56 return 1;
57 }
58
59 int main ()
60 {
61 int num;
62
63 scanf ("%d", &num);
64
65 int ret[num];
66 for (int i=0; i<num; i++)
67 {
68 int len;
69 scanf ("%d", &len);
70
71 char str[len + 1];
72 scanf ("%s", str);
73
74 struct chnum *cn = col (len, str);
75
76 if (check (cn, len) == 0)
77 ret[i] = 1;
78 else
79 ret[i] = 0;
80 }
81
82 for (int i=0; i< num; i++)
83 {
84 if (ret[i])
85 printf ("YESn");
86 else
87 printf ("NOn");
88 }
89
90 return 0;
91 }

这种小代码我就不怎么搞注释了,我相信 main 函数的流程还是能被一眼看出来的,而且模块化的编程风格应该更好理解。下面讲下我
第一次提交遇到的 WA 错误。

Handle 一切你能 Handle 的地方

开源项目有一条哲学:只要眼球多,bug 都好捉。对于个人写程序来说,撑死了也就俩眼球,所以你必须要尽可能地 handle 一切,
比如变量该初始化就初始化,数组长度一定要考虑等等。

第一次提交,上面代码中没有

 32		if (j < len - 1)
33 {
34 cn[++j].c = ' ';
35 }

和

 50			else if (cn->c == ' ')
51 break;

这两处的。看了代码就知道 cn 数组只有在字符串中每两个相邻字符都不相同的情况下才会全部被赋值。而其他的情况下,长度根本
没有到 len。那么问题来了,没有被赋值到的 cn 数组元素的值会是什么呢,鬼知道!然后就有可能本来输出该是 NO 的输出了 YES。
所以我决定手动给出结束标志,一个空格,这当然是一种权宜之策。

而且字符串数组声明的时候,长度一定得是串长度加一。我做实验来看,就算 strlen 访问 str[5]=”hello”,越界了也还是正常输出
。但注意一下总是好的。

In Wuhan 337 Prison

hiho一下:Beautiful String的更多相关文章

  1. Codeforces Round #604 (Div. 2) A. Beautiful String

    链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...

  2. CF1328B K-th Beautiful String

    CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...

  3. hihocoder 1061.Beautiful String

    题目链接:http://hihocoder.com/problemset/problem/1061 题目意思:给出一个不超过10MB长度的字符串,判断是否里面含有一个beautiful strings ...

  4. Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)

    题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...

  5. HackerRank beautiful string

    问题 https://vjudge.net/problem/HackerRank-beautiful-string 给一个字符串S,可以任意取走S中的两个字符从而得到另外一个字符串P,求有多少种不同的 ...

  6. B. Pasha and String

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  7. UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>

    L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/ ...

  8. Pasha and String(思维,技巧)

    Pasha and String Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...

  9. Nikita and string [思维-暴力] ACM

    codeforces Nikita and string time limit per test   2 seconds memory limit per test   256 megabytes O ...

随机推荐

  1. 吴裕雄--天生自然 PYTHON3开发学习:JSON 数据解析

    import json # Python 字典类型转换为 JSON 对象 data = { 'no' : 1, 'name' : 'Runoob', 'url' : 'http://www.runoo ...

  2. mysql命令行操作大全

    Mysql安装目录 数据库目录/var/lib/mysql/配置文件/usr/share/mysql(mysql.server命令及配置文件)相关命令/usr/bin(mysqladmin mysql ...

  3. oracle_(第三课)网络服务配置

    1.打开Net Manager 2.开始配置 3.检测 4.SQL Developer 检测 新创数据库连接,连接类型选择  TNS ,若在网络别名中能看到MYORCL,则证明你成功了

  4. E - Apple Tree(树状数组+DFS序)

    There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. ...

  5. RDD(三)——transformation_value类型

    map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成.有多少个元素,func就被执行多少次. mapPartitions(func) 类似于map,但是,map函 ...

  6. TCP、UDP、HTTP与HTTPS

    TCP.UDP.HTTP与HTTPS都是通信协议,在这里首先先介绍一下什么是通信协议. 什么是通信协议? 通信协议(communications protocol)是指双方实体完成通信或服务所必须遵循 ...

  7. SQL热备原理

  8. 吴裕雄--天生自然python学习笔记:python文档操作批量替换 Word 文件中的文字

    我们经常会遇到在不同的 Word 文件中的需要做相同的文字替换,若是一个一个 文件操作,会花费大量时间 . 本节案例可以找出指定目录中的所有 Word 文件(包含 子目录),并对每一个文件进行指定的文 ...

  9. Redis为什么会比MySQL快?

    1.Redis是基于内存存储的,MySQL是基于磁盘存储的 2.Redis存储的是k-v格式的数据.时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn), ...

  10. FPGA基础架构总结

    1.为什么FPGA的整体逻辑的速度有限制? 与ASIC相比较,AS指的是(application specific)专用集成应用,而FPGA是可编程逻辑,在实现的过程中,AS是直接用最基础的逻辑门实现 ...