SListNode*IsRing(SListNode*&pHead)//判断链表是否有环,求相聚点
{
//判空、有、没有
//思路:两个指针从头开始一快(2步)一慢(1步),若最后可以相聚,则链表有环
if(pHead)
{
SListNode*fast=pHead;
SListNode*slow=pHead;
while(fast&&fast->next)
{
fa..
分类:
编程语言 时间:
2016-01-05 01:37:54
阅读次数:
294
题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串。思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小表示即可。#pragma comment(linker, "/STACK:10240000")#inc...
分类:
其他好文 时间:
2015-08-27 02:11:21
阅读次数:
173
题目请点我
题解:
题目大意:有一个字符串s,可以在前后添加字符,使字符串成为一个循环次数至少为2的循环字符串,输出最少需要添加的字符数目。
首先可以证明题目可以等价为只在末尾添加字符使满足题意,要找到添加资格字符我们首先要找到循环单位的长度,利用一个辅助数组储存从起始位置开始长度为i的串的循环长度,初始值为i,利用与Next数组之间的关系来更新,找到循环长度,比如字符串abcabc,Next...
分类:
其他好文 时间:
2015-08-21 13:47:47
阅读次数:
108
题目大意:给出一个序列,求变换几次可以回到原来的位置。比如 1 3 2 ,3 不在原来的位置,变到3位置,次数加1,2变到2,次数+1.得到2.。解题思路:做法就是分解循环长度。然后求下最小公倍数。但是不能直接用lcm求最小公倍数。。我们可以考虑用质数分解来求,即公共的质因子乘每个数本身的质因子。#include
#include
#include <algori...
分类:
其他好文 时间:
2015-08-17 21:45:35
阅读次数:
119
题意:给一个置换,求最小循环长度对p取模的结果思路:一个置换可以写成若干循环的乘积,最小循环长度为每个循环长度的最小公倍数。求最小公倍数对p取模的结果可以对每个数因式分解,将最小公倍数表示成质数幂的乘积形式,然后用快速幂取模,而不能一边求LCM一边取模。由于这题数据量太大,需要用到输入挂,原理是把文...
分类:
其他好文 时间:
2015-08-16 15:01:51
阅读次数:
387
显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况.判断一个数m是否是满足题意的lcm. m = ∏piai, 当∑piai≤ n时是满足题意的. 最简单我们令循环长度分别为piai,不足n的话,我们令其他循环长度为1, 补到=n为止. 这样它们的lcm显然是=m的.然后就是一个背包了.....
分类:
其他好文 时间:
2015-08-14 18:55:20
阅读次数:
123
本题题意:
输入一个长度不超过200,数值不超过100的循环小数,求出小数点后的循环节,循环节长度,循环次数。
解题思路:
本题为KMP算法的较全面的考察,首先将小数点后的数存放到一个数组中,并求出next数组,然后,由KMP算
法可知,循环节长度为:【k-next[k]】;循环次数为【k/(k-next[k])】,知此,循环节也不难求了,按循环长度直接输
...
分类:
编程语言 时间:
2015-08-08 16:35:23
阅读次数:
127
题目地址:POJ 1026
题意:给一个字符串加密,如果字符串长度不够n,那么对字符串补空格,一直到n。给你n个数字代表加密方式,i位置的字母将被写到加密信息的ai位置,如此反复加密k次,让你求最后的密文。
思路:其实就是字符串的下标按照加密方式来置换,若干次变换后肯定又会回到原来的位置,每次的虚幻长度用lon来记录。
例如:1->4->7->1 那么1号位置的循环长度lon[1]=3;2...
分类:
其他好文 时间:
2015-07-25 16:52:59
阅读次数:
176
题意:一个环长度为L,上面有n棵树,篮子一次可装K个苹果; 给出每棵树的位置和树上的苹果数,求将所有苹果运回原点的最少的总距离;思路:将环分为两半考虑,且若有绕环一圈的情况也只能有一次; 以单个苹果为对象进行处理; 考虑不绕圈的情况:每个半圈优先取最远的苹果;sum[i]表示取第i个...
分类:
移动开发 时间:
2015-07-24 20:15:26
阅读次数:
155
题意:给一个分数p/q,求它的小数的二进制表示的循环部分的开始位置和循环长度。
对于一个十进制小数,求二进制的方法是不断的乘2取整数部分。所以首先把p/q化成最简的形式p'/q',然后对其不断乘2,直到p'*2^i == p'*2^j (mod q'),这时候循环就出现了,i是循环开始的位置,j-i是循环长度。
经过变换得到:
p'*2^i*(2^(j-i)-1) ==0 (mod ...
分类:
其他好文 时间:
2015-07-16 22:24:24
阅读次数:
140