hiho一下:Beautiful String
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的更多相关文章
- Codeforces Round #604 (Div. 2) A. Beautiful String
链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...
- CF1328B K-th Beautiful String
CF1328B K-th Beautiful String,然而CF今天却上不去了,这是洛谷的链接 题意 一个长度为\(n\)的字符串,有2个\(\texttt{b}\)和\(n-2\)个\(\tex ...
- hihocoder 1061.Beautiful String
题目链接:http://hihocoder.com/problemset/problem/1061 题目意思:给出一个不超过10MB长度的字符串,判断是否里面含有一个beautiful strings ...
- Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)
题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...
- HackerRank beautiful string
问题 https://vjudge.net/problem/HackerRank-beautiful-string 给一个字符串S,可以任意取走S中的两个字符从而得到另外一个字符串P,求有多少种不同的 ...
- B. Pasha and String
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- 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/ ...
- Pasha and String(思维,技巧)
Pasha and String Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- Nikita and string [思维-暴力] ACM
codeforces Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes O ...
随机推荐
- js 经纬度计算直线距离
function getRad(d) { var PI = Math.PI; return d * PI / 180.0; } function getDistance(lat1, lng1, lat ...
- Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...
- 记录一次追踪@AutoWired的过程
目录 记录一次追踪@AutoWired的过程 前言 疑惑:依赖究竟是怎么自动注入的 AutoWiredAnnotationBeanPostProcessor中探究 自动注入debug流程追踪 dete ...
- DRF一对多序列化和反序列化
models.py # 商品分类 class Category(models.Model): name = models.CharField(max_length=32) # 商品 class Goo ...
- Rnotebook中用python画图
如果notebook需要转化为pdf, 能想到办法是保存图片文件,嵌入mardown语法中. 但是如果在html中显示, 可以考虑下面思虑, 比较取巧. ``` {python, engine.pat ...
- Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】
# Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...
- CodeForces - 977E
题:https://codeforces.com/problemset/problem/977/E 题意:给你一个图,问你有几个没有杂边的单环(度全为2) 分析:单环点的度数一定是2,连续边,判断是否 ...
- Android开发学习3
学习内容: 1.复选框CheckBox 2.ImageView & 使用第三方库加载网络图片 3.列表视图ListView 4.网格视图GridView 5.ScrollView & ...
- HDU-1540 Tunnel Warfare(区间连续点长度)
http://acm.hdu.edu.cn/showproblem.php?pid=1540 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...
- The sequence and de novo assembly of the giant panda genome.ppt
sequencing:使用二代测序原因:高通量,短序列 不用长序列原因: 1.算法错误率高 2.长序列测序将嵌合体基因错误积累.嵌合体基因:通过重组由来源与功能不同的基因序列剪接而形成的杂合基因 se ...