九度OJ 1149:子串计算 (计数、排序)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1026
解决:571
- 题目描述:
-
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
- 输入:
-
输入包含多行,每行一个字符串。
- 输出:
-
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
- 样例输入:
-
10101
- 样例输出:
-
0 2
01 2
1 3
10 2
101 2
思路:
计数然后排序。呃,我怎么会写了这么长的代码。。。
代码:
#include <stdio.h>
#include <string.h> #define M 100 int main(void)
{
int n, i, j, k, m;
char s[M+1], son[M][M][M+1];
char *pson[M][M], *ptmp;
int c[M][M], count[M];; while (scanf("%s", s) != EOF)
{
//printf("s=%s\n", s);
for (i=0; i<M; i++)
{
for (j=0; j<M; j++)
c[i][j] = 0;
} n = strlen(s);
for (i=1; i<=n; i++)
{
for (j=0; j<=n-i; j++)
{
strncpy(son[i-1][j], s+j, i);
son[i-1][j][i] = '\0';
}
//for (j=0; j<=n-i; j++)
//{
// printf("i=%d, j=%d, s=%s\n", i, j, son[i-1][j]);
//}
count[i-1] = 0;
for (j=0; j<=n-i; j++)
{
ptmp = son[i-1][j];
if (j==0)
{
//printf("i=%d, j=%d, count[i-1]=%d, ptmp=%s\n", i, j, count[i-1], ptmp);
pson[i-1][j] = ptmp;
count[i-1] ++;
c[i-1][j] ++;
}
else
{
//printf("i=%d, j=%d, count[i-1]=%d, ptmp=%s\n", i, j, count[i-1], ptmp);
for (k=0; k<count[i-1]; k++)
{
/*
if (i==2 && k<2 )
{
printf("===\n");
for (int jj=0; jj<count[i-1]; jj++)
{
printf("i=%d, jj=%d, s=%s, c=%d\n", i, jj, pson[i-1][jj], c[i-1][jj]);
}
printf("===\n");
}
*/
if (strcmp(ptmp, pson[i-1][k]) == 0)
{
//printf("strcmp==0, i=%d, j=%d, k=%d, ptmp=%s, pson[i-1][k]=%s\n", i, j, k,
//ptmp, pson[i-1][k]);
c[i-1][k] ++;
break;
}
else if (strcmp(ptmp, pson[i-1][k]) < 0)
{
//printf("strcmp<0, i=%d, j=%d, k=%d, ptmp=%s, pson[i-1][k]=%s\n", i, j, k,
//ptmp, pson[i-1][k]);
for (m=count[i-1]-1; m>=k; m--)
{
pson[i-1][m+1] = pson[i-1][m];
c[i-1][m+1] = c[i-1][m];
}
pson[i-1][k] = ptmp;
c[i-1][k] = 1;
count[i-1] ++;
break;
}
//printf("strcmp>0, i=%d, j=%d, k=%d, ptmp=%s, pson[i-1][k]=%s\n", i, j, k,
//ptmp, pson[i-1][k]);
if (k == count[i-1]-1)
{
k ++;
pson[i-1][k] = ptmp;
c[i-1][k] = 1;
count[i-1] ++;
break;
}
}
}
//printf("-----i=%d, j=%d, pson[i-1][count[i-1]-1]=%s\n", i, j, pson[i-1][count[i-1]-1]);
}
/*
printf("===\n");
for (j=0; j<count[i-1]; j++)
{
printf("i=%d, j=%d, s=%s, c=%d\n", i, j, pson[i-1][j], c[i-1][j]);
}
printf("===\n");
*/
} int nk, nm;
int ctmp;
for (i=1; i<=n; i++)
{
for (j=0; j<count[i-1]; j++)
{
//printf("i=%d, j=%d\n", i, j);
if (i==n && j==count[i-1]-1)
break;
for (k=1; k<=n-i+1; k++)
{
for (m=0; m<count[k-1]; m++)
{
//printf("i=%d, j=%d, k=%d, m=%d\n", i, j, k, m);
if (k==n-i+1 && m>=count[k-1]-1-j)
break;
if (m==count[k-1]-1)
{
nk = k+1;
nm = 0;
}
else
{
nk = k;
nm = m+1;
}
if (strcmp(pson[k-1][m], pson[nk-1][nm]) > 0)
{
ptmp = pson[k-1][m];
pson[k-1][m] = pson[nk-1][nm];
pson[nk-1][nm] = ptmp;
ctmp = c[k-1][m];
c[k-1][m] = c[nk-1][nm];
c[nk-1][nm] = ctmp;
}
}
if (k==n-i+1 && m==count[k-1]-1-j)
break;
}
}
if (i==n && j==count[i-1]-1)
break;
} for (i=1; i<=n; i++)
{
//printf("\n");
for (j=0; j<count[i-1]; j++)
{
if (c[i-1][j] >= 2)
printf("%s %d\n", pson[i-1][j], c[i-1][j]);
}
//printf("\n");
}
} return 0;
}
/**************************************************************
Problem: 1149
User: liangrx06
Language: C
Result: Accepted
Time:400 ms
Memory:1952 kb
****************************************************************/
九度OJ 1149:子串计算 (计数、排序)的更多相关文章
- 【九度OJ】题目1202:排序 解题报告
[九度OJ]题目1202:排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1202 题目描述: 对输入的n个 ...
- 九度OJ 1349:数字在排序数组中出现的次数 (排序、查找)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2489 解决:742 题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小. ...
- 九度oj 题目1130:日志排序
题目描述: 有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“hs_10000_p”是计算任务的名称,“2007-01-17 19:22:53,315”是计算任 ...
- 【九度OJ】题目1202:排序
题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据,将排序后 ...
- 九度OJ 1010:计算A+B【字符串和数组】
/*======================================================================== 题目1010:A + B 时间限制:1 秒内存限制 ...
- 【九度OJ】题目1201-二叉排序树
题目 建树过程是递归,"递归的思路不是很复杂",经过题目1078的训练,直接开始编码.提交及修改的过程告诉自己,这是一个错觉,对递归的理解还应该再进一步. 自己的实现 #inclu ...
- 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...
- 九度OJ 1346:会员积分排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:967 解决:413 题目描述: 元旦佳节快到了,超市A想要给会员一些奖品.但是奖品有限,所以它需要给这些会员做一个排序,然后将名单输出来.排 ...
- 九度OJ 1339:ACM (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:712 解决:379 题目描述: 今年的ACM世界总决赛快要开始了,需要有一个排名算法来对每支队伍进行现场排名.ACM组委会把这个任务交给了你 ...
随机推荐
- CentOS 7下安装配置FTP
安装vsftpd yum install -y vsftpd 编辑ftp配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #anonymous_e ...
- 基于Bootstrap的页面排版知识
标题: Bootstrap定义了所有HTML的标题样式,<h1>...<h6>标签或者在标签内加入.h1 class等可以得到一样的效果 效果: 副标题: 标签<smal ...
- UIScrollView/UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)
在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...
- 2016.6.20 在Eclipse配置Tomcat服务器的步骤
好久没接触,又忘记了如何在eclipse中配置tomcat. (1)打开eclispe的preference (2)找到Server下方的Runtime Environment,单击右方的Add按钮. ...
- SQLServer-----SQLServer 2008 R2安装
- android历史
Android一词最早是出如今法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android.这就是Android小人名字的由来 ...
- vs2010+qt4编译出现error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject等错误
1.当vs2010编译qt时会出现以下错误: 1>------ 已启动全部重新生成: 项目: MyDialog, 配置: Debug Win32 ------ 1>生 ...
- 关于安装oracle 11g client 出现安装先决条件检查全部失败
本文转自:https://blog.csdn.net/iloli/article/details/45244159 今天我在安装Oracle11gClient时,全部显示成N/A,Oracle无法执行 ...
- PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)
php正则匹配6到16位的字符串. 只允许包含数字.字母.下划线组成的6到16位字符,符合返回ture,否则返回false. 解答: 6到16位,正则可以这样写:{6,16}. 任意的字符6到16位的 ...
- Codeforces 467D Fedor and Essay bfs
题目链接: 题意: 给定n个单词. 以下有m个替换方式.左边的单词能变成右边的单词. 替换随意次后使得最后字母r个数最少,在r最少的情况下单词总长度最短 输出字母r的个数和单词长度. 思路: 我们觉得 ...