南阳329--循环小数(Kmp)

循环小数

时间限制:3000 ms  |  内存限制:65535 KB

难度:1

描述

我们可爱的 c小加 近段儿正在潜心研究数学,当他学习到循环小数这一部分时不是太明白循环体是什么意思(比如说3.23232323的循环体是23、2323、23232323),假设我们现在的循环小数都是严格循环的并且有限的,也就是说不出现2.16666666(循环体为6,长度为1)的情况,只有123123这样的循环出现。给他一个小数,他需要找出最小循环体的长度、循环体和循环的次数,请你帮他解决这个问题。

输入
输入的第一行是t,表示有t组测试数据(t<=100)。
随后的t行,每行都是一个小于10并且大于0的小数(总长度<=200)。
输出
对每组输入,输出结果单独成行,输出最小循环体的长度、循环体和出现循环的次数。
样例输入
3
8.6987698769876987
0.666
5.1
样例输出
4 6987 4
1 6 3
1 1 1
来源
例题改编
上传者
xiewuqiang
做了这么多Kmp, 还是思路不清晰。
ac:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 using namespace std;
 5 char a[220], b[220]; int p[220], lena, k;
 6 void Getp()
 7 {
 8     int i = 0, j = -1;
 9     p[i] = j;
10     while(i < k)
11     {
12         if(j == -1 || b[i] == b[j])
13         {
14             i++; j++;
15             p[i] = j;
16         }
17         else
18             j = p[j];
19     }
20 }
21 int main()
22 {
23     int t;
24     scanf("%d", &t);
25     while(t--)
26     {
27         int i;
28         scanf("%s", a);
29         lena = strlen(a);
30         for(i = 0; i < lena; i++)
31         {
32             if(a[i] == ‘.‘)
33             {
34                 i += 1;
35                 break;
36             }
37         }
38     //    printf("%d\n", i);
39         k = 0;
40         for(; i < lena; i++)
41             b[k++] = a[i];
42     //        printf("%d\n", k);
43         Getp();
44         printf("%d ", k - p[k]);
45         for(i = 0; i < k - p[k]; i++)
46             printf("%c", b[i]);
47         printf(" ");
48         printf("%d\n", k/(k-p[k]));
49     }
50     return 0;
51 }

时间: 2024-10-20 03:15:24

南阳329--循环小数(Kmp)的相关文章

nyoj 329 循环小数【KMP】【求最小循环节长度+循环次数+循环体】

循环小数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 我们可爱的 c小加 近段儿正在潜心研究数学,当他学习到循环小数这一部分时不是太明白循环体是什么意思(比如说3.23232323的循环体是23.2323.23232323),假设我们现在的循环小数都是严格循环的并且有限的,也就是说不出现2.16666666(循环体为6,长度为1)的情况,只有123123这样的循环出现.给他一个小数,他需要找出最小循环体的长度.循环体和循环的次数,请你帮他解决这个问题. 输入 输

第三次周赛题解【并查集 KMP DFS BFS 快速幂】

问题 A: 一道签到题 时间限制: 2 Sec  内存限制: 128 MB 提交: 63  解决: 28 [提交][状态][讨论版] 题目描述 我想说这是一道签到题,意思就是本次测试中最水的一道,不过我这样说你真的愿意相信我吗?哈哈,题目是这样的给你一下小数,然后请告诉我分别告诉我这个小数的循环节的循环次数.循环节以及循环节长度 输入 输入包括多组测试数据每组测试数据1行,包括一个小数,小数的长度不超过200,小数大于0小于100 输出 分别输出这个小数的循环节的长度.循环节以及循环次数,中间以

萌新笔记——用KMP算法与词典实现屏蔽敏感词(UTF-8编码)

前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"***"就可以了.对于子串的查找,就KMP算法就可以了.但是敏感词这么多,总不能一个一个地遍历看看里面有没有相应的词吧! 于是我想到了前几天写的字典树.如果把它改造一下,并KMP算法结合,似乎可以节约不少时间. 首先说明一下思路: 对于KMP算法,这里不过多阐述.对于敏感词库,如果把它存进字典树,并在

NYOJ 5 Binary String Matching (kmp 字符串匹配)

Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alphabet consist only '0' and '1'. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is '100111011

hpu 问题 A 一道签到题(KMP算法的考察)

本题题意: 输入一个长度不超过200,数值不超过100的循环小数,求出小数点后的循环节,循环节长度,循环次数. 解题思路: 本题为KMP算法的较全面的考察,首先将小数点后的数存放到一个数组中,并求出next数组,然后,由KMP算 法可知,循环节长度为:[k-next[k]]:循环次数为[k/(k-next[k])],知此,循环节也不难求了,按循环长度直接输 出即可. 参考代码: #include<stdio.h> #include<string.h> char str[300];

第四十二课 KMP算法的应用

思考: replace图解: 程序完善: DTString.h: 1 #ifndef DTSTRING_H 2 #define DTSTRING_H 3 4 #include "Object.h" 5 6 namespace DTLib 7 { 8 9 class String : Object 10 { 11 protected: 12 char* m_str; 13 int m_length; 14 15 void init(const char* s); 16 bool equa

Educational Codeforces Round 21 G. Anthem of Berland(dp+kmp)

题目链接:Educational Codeforces Round 21 G. Anthem of Berland 题意: 给你两个字符串,第一个字符串包含问号,问号可以变成任意字符串. 问你第一个字符串最多包含多少个第二个字符串. 题解: 考虑dp[i][j],表示当前考虑到第一个串的第i位,已经匹配到第二个字符串的第j位. 这样的话复杂度为26*n*m*O(fail). fail可以用kmp进行预处理,将26个字母全部处理出来,这样复杂度就变成了26*n*m. 状态转移看代码(就是一个kmp

hiho 1015 KMP算法 &amp;&amp; CF 625 B. War of the Corporations

#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一只河蟹,于是河蟹就向小Hi和小Ho提出了那个经典的问题:“小Hi和小Ho,你们能不能够判断一段文字(原串)里面是不是存在那么一些……特殊……的文字(模式串)?” 小Hi和小Ho仔细思考了一下,觉得只能想到很简单的做法,但是又觉得既然河蟹先生这么说了,就

hdu2328 Corporate Identity 扩展KMP

Beside other services, ACM helps companies to clearly state their "corporate identity", which includes company logo but also other signs, like trademarks. One of such companies is Internet Building Masters (IBM), which has recently asked ACM for