uestc 1703一道更简单的字符串题目

https://vjudge.net/problem/UESTC-1703

题意:略

思路:

枚举+字符串hash。

ans从1到len开始枚举字符串的长度,然后就依次比较各段长度为ans的字符串的hash值是否和hash(0,ans)的hash值相等。对于剩余的长度为tlen小于长度为ans的字符串,比较它的hash和hash(0,tlen)。一旦遇到一个满足条件的ans,直接跳出,就可以保证这个是最小的了。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 char s[1000005];
 5
 6 unsigned int mha(int st,int len)
 7 {
 8     unsigned int sed = 131;
 9     unsigned int h = 0;
10
11     for (int i = 0;i < len;i++)
12     {
13         h = h * sed + s[st+i];
14     }
15
16     return (h & 0x7FFFFFFF);
17 }
18
19 int main()
20 {
21     scanf("%s",s);
22
23     int len = strlen(s);
24
25     int ans;
26
27     for (int i = 1;i <= len;i++)
28     {
29         bool f = 0;
30
31         int code = mha(0,i);
32
33         for (int j = 0;j + i < len;j += i)
34         {
35             int tmp = mha(j,i);
36
37             if (tmp != code)
38             {
39                 f = 1;
40                 break;
41             }
42         }
43
44         int re = len % i;
45
46         code = mha(0,re);
47
48         int tmp = mha(len-re,re);
49
50         if (tmp != code) f = 1;
51
52         if (!f)
53         {
54             ans = i;
55             break;
56         }
57     }
58
59     printf("%d\n",ans);
60
61     return 0;
62 }
时间: 2024-08-18 06:47:54

uestc 1703一道更简单的字符串题目的相关文章

歌乐电子一道很简单的笔试题目竟然搞错了!!!

题目打开图片就可以看到 void main(void) {union unt        { unsigned char uc[4];           unsigned int ui; };        union unt t;        t.ui=0x12345678;        printf("%d\n",t.uc[1]);}   共同体在嵌入式开发中是很少用的,所以在复习的时候也没有去仔细去看,百度了一下,共同里里面的变量用的是同一个存储空间,也就是说,我在共同体

ZOJ 1115 Digital Roots(简单,字符串与数)

题目 //好一道水水题,可是我居然也错了那么多次,后来百度来发现是因为数据数位可能很长很长,要用字符串数组... //简单 //有坑啊——数据可能很大很大,要用字符串表示! #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { char s[1010]; while(scanf("%s",s)!=EOF) { if(strc

视图——让你的机房查询语句更简单

使用视图背景 刚开始做机房收费系统的时候师傅说过要用上视图.存储过程.触发器这些东西.当时没有太多的感觉,不知道什么时候该用,用到哪里.就在几天前因为在做关于两个表的查询语句时,就自己建立一个视图,然后查询出来结果,然后就成功了.我做的有点太简单了,在想是不是自己做错了.上网查了一下,看了一些博客.事实证明,它就是来简化数据库的操作,同时提高了速度. 视图简介: 视图是一张虚拟表,是存储在数据库中的查询的SQL语句,与此相关的数据并没有再存一份于数据库中.通过视图看到的数据仍然存放在基表中.视图

OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用。

okhttp-OkGo 项目地址:jeasonlzy/okhttp-OkGo 简介:OkHttpUtils-2.0.0 升级后改名 OkGo,全新完美支持 RxJava,比 Retrofit 更简单易用.该库是封装了 okhttp 的网络框架,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,可以自定义返回对象,支持 Https 和自签名证书,支持 cookie 的持久化和自动管理,支持四种缓存模式缓存网络数据,支持 301 和 302 重定向,扩展了

[LeetCode] Gas Station,转化为求最大序列的解法,和更简单简单的Jump解法。

LeetCode上 Gas Station是比较经典的一题,它的魅力在于算法足够优秀的情况下,代码可以简化到非常简洁的程度. 原题如下 Gas Station There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to

考考你!一道有趣的Javascript小题目

今天的内容很简单,给大家分享一个有趣的Javascript小题目. 题目很简单,就是填空: var a = ______; var b = a;alert(a==b); // alert "false" 请将程序补充完整,使得弹出的对话框显示为"false". 先答出的有奖哦 ^ ^ --------------------- 用简单而风趣的形式表达出自己的想法是我一直追求的目标(当然,目前还处于"XX主义初级阶段",还有很长的路要走). 如果你

简单操作字符串

使用javascript实现常用的字符串操作. 一,字符串按逗号分割装入数组,使用split()函数可以实现. var str=",,,,,,,,,,,abc,123,4cc,569,dfk,,,,,,,,"; function goArray(str){ var arr=[]; var s=""; var j=0; for(var i=0;i<str.length;i++){ if(str.charAt(i)!=','&&i!=str.len

[转]九个Console命令,让js调试更简单

转自:九个Console命令,让js调试更简单 一.显示信息的命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html> <head>     <title>常用console命令</title>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" 

jQuery Validate【为表单提供了强大的验证功能,让客户端表单验证变得更简单】

jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 J?rn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUn