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. 批量刷数据sql

    update t_free_m**  m set m.plate_no = ( select v.plate_num from t_wh_vehi*** v where v.vin = m.car_v ...

  2. SQL count与distinct的结合使用

    select Score,(select count(distinct score) from Scores where score >= s.score) as Rank from Score ...

  3. vim 高级技巧

    复制粘贴 normal 或v模式下 y/d/x 复制后,p来粘贴 编辑模式 默认的 set autoindent 会导致粘贴代码会导致缩进混乱 一则可以先关掉autoindent,二则可以先设置set ...

  4. k8s miniKube 入门

    k8s miniKube 入门 miniKube 是单机版kubernetes, 可以配置运行在同一台主机上的服务和pod,并使用docker作为虚拟化工具 下载:直接下载可执行文件,复制到path ...

  5. Java--类以及对象

    什么是类 就是将一类事物的相同的本质特性抽象出来,类具有属性和方法,属性就是特征(具有什么),方法就是行为(能做什么). 类是一种引用的数据类型,类创建的对象的过程叫做实例化 什么是对象 对象就是类中 ...

  6. python,pandas, DataFrame数据获取方式

    一.创建DataFrame df=pd.DataFrame(np.arange(,).reshape(,)) my_col=dict(zip(range(),['A','B','C'])) df.re ...

  7. Do jobs|permanent|secure job|Move|Look after|provide sb with sth|Move|Enjoy a good time|Learn about|Be fond of|Have a clearer idea|String quarter|Be subject to|A has little with B|Pigment

    Do jobs|work jobs Long-terms|permanent Gain jobs/secure job Move|go to |stay in |live in|settle down ...

  8. the least-squares criterion|Sxx|Sxy|Syy|Regression Equation|Outliers|Influential Observations|curvilinear regression|linear regression

    4.2 The Regression Equation Because we could draw many different lines through the cluster of data p ...

  9. 创想变现:斯坦福设计创新课堂ME310分享(下篇)

    编者按:今年6月,微软亚洲研究院人机交互组研究员顾嘉唯,在美国斯坦福大学担任了D-School的ME310设计课程的项目评审.该课程是斯坦福大学的全球联合新产品设计创新课程,学习方式以小组为单位,每个 ...

  10. 做成像的你不得不了解的真相2-灵敏度和QE

    科研级相机的灵敏度由三个主要参数决定: 探测器的QE, 像元尺寸和相机噪声. 后两项我们以后再做专题讨论.这期先讲讲小编认为顶顶重要,看起来最容易理解,但是其实还有些奥妙的QE. QE-量子效率 QE ...