xdoj 1012

2023-12-15 16:08
文章标签 1012 xdoj

本文主要是介绍xdoj 1012,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


 
转自我们班大佬的
#include<cstdio>
#include<cstring>
using namespace std;
char s[400005];
int next[400005];
void get_next(int len)
{next[0]=-1;int j=-1;int i=0;while(i<len){if(j==-1||s[len-i-1]==s[len-j-1]) next[++i]= ++j;else j=next[j];}
}
int main()
{int len;while(~scanf("%s",s)){len=strlen(s);get_next(len);int maxcnt=0;int maxl=0;for(int i=1;i<=len;i++){int l=i-next[i];if(l&&i%l==0){int cnt=i/l;if(cnt>=maxcnt){maxcnt=cnt;maxl=l;	}}}if(maxcnt>1){for(int i=len-maxl;i<len;i++) printf("%c",s[i]);printf(" %d\n",maxcnt);}else printf("-1\n");}}

1012: 重复序列

时间限制: 1 Sec   内存限制: 128 MB
提交: 238   解决: 41
[ 提交][ 状态][ 讨论版]

题目描述

为了让密码变得更长,fpcsong在密码的末端增加了一些无意义内容。为了能够记住密码,增加的内容往往是重复序列。例如下列密码

xduacm2015_mimayaochangchangchang

的末端有一重复序列,即"chang"重复3次。现在,给你一个串s,请你确定一个串p和数x,使得p非空,x>1,px(指串p重复x次)为s的后缀。若有多个可能的解,输出x最大的解。若仍有多解,输出|p|(p的长度)最大的解。若无解,输出-1。

输入

多组数据,每组数据1行,包含一个串s。s中只有字母(大小写敏感),数字,下划线。|s|<=400000。

输出

对于每组数据,输出1行,若有解输出串p和整数x,用空格分割。若无解输出-1。

样例输入

xduacm2015_mimayaochangchangchang
orzorzorzorz
Orzorzorzorz
orzorz_diaodiaodiaodiao
we_orz_tencent_light_light
ooooooooooops

样例输出

chang 3
orz 4
orz 3
diao 4
_light 2
-1

提示

来源

这篇关于xdoj 1012的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/497052

相关文章

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

1012. The Best Rank (25)暴力枚举 排序

1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To evaluate the performance of our first year CS majored students, we consider

HYSBZ 1012 最大数maxnumber

思路:在单调队列不更新列首,因为查询区间大小不确定,所以不能保证下次是否还用到它 #include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 222222#define ll long longint que[N];ll m,d;ll a[N];int cnt;ch

NYOJ 191 POJ 1012 Joseph(约瑟夫环问题)

链接:click here~~ 题意:假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 。现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1。现在要求,在踢掉第一个好人前,必需把所有的坏人踢掉,问,给定一个k,求满足这个要求的最小的m,现在希望你写一个程序,快速的帮助小珂,计算出来这个m。 思路:我们来回想一下最基本的约瑟夫环问题, n个人

1012 A + B的输入输出练习(三)

题目描述 你的任务是计算A + B。 输入 输入包含多个测试案例。每个测试用例包含一个对整数a和b,每行一对整数。一个测试用例含有0 0结束输入,且该试验的情况是不被处理。 输出 对于每对输入的整数a和b你应该输出的总和a和b中的一行,并与1行中输入输出的每一行的。

奋战杭电ACM(DAY5)1012

好吧这又是一道水题……今天第四题……前面几题的算法都没接触过啊啊啊啊啊!!!疯了……军校神烦晚上不能看书,尼玛,明天白天好好看书思考后再写前几题。 以上。 u Calculate e #include <iostream>#include <iomanip>using namespace std;int plus(int a){if(a==0)return 1;else retu

WikiOI 1012 最大公约数和最小公倍数问题

不太想写,直接搜的 #include<stdio.h>int main(){int x0, y0, x, i = 2, k = 0;scanf("%d%d",&x0, &y0);if (y0 % x0 != 0) {printf("0\n"); return 0;}x = y0 / x0;while (x != 1){while (x % i != 0) i++; k++;while (x

九度 题目1012:畅通工程

题目1012:畅通工程 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3629 解决:1609 题目描述:     某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 输入:

swust oj 1012: 哈希表(链地址法处理冲突)

直接采用二维数组模拟实现 #include <iostream>using namespace std;const int N = 100;int arr[N][N];int point[N];//计数int main(){int m, n,data;cin >> m >> n;for (int i = 0; i < n; i++){cin >> data;int key = d

hdu 1232 九度oj 1012 畅通工程

题目描述:     某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 输入:     测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随