链接:https://www.nowcoder.com/acm/contest/57/E

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

有一串有n颗珠子的项链,每颗珠子上有一个数字,从顺时针方向看依次是第1,2,…,n个珠子,第n个珠子之后是第1个珠子。但是小G觉得这串项链的造型不够美观,他决定用这串项链上的珠子造出一个新的项链,并且他希望这串新的项链是对称的。

一串项链是对称的,当且仅当存在至少一颗珠子满足:把它作为起始位置(即顺时针和逆时针方向数第0个珠子),对于任意的自然数i,顺时针数第i个珠子上的数字和逆时针数第i个珠子上的数字相同。特别的,一个仅有一颗珠子的项链也是对称的。

小G可以使用合成技术将任意正整数颗珠子合成为一个新的珠子,新珠子上的数字=原珠子上的数字的异或和。

用合成技术造出新项链的过程是这样的:最开始由小G确定一个能整除n的正整数k和一个原项链中的起始位置,之后从起始位置开始顺时针方向取连续的k个珠子,合成一个新的珠子作为新项链的第1个珠子,再取接下来连续的k个珠子,合成一个新的珠子作为新项链的第2个珠子,……,直到取完原项链的所有珠子为止。注意,合成的新珠子会直接放到新项链的位置,并不会插入原项链之中参与之后合成过程。新项链同样满足从顺时针方向看依次是第1,2,…,n个珠子,第n个珠子之后是第1个珠子。

小G希望新的项链上的珠子尽可能多,问新项链上的珠子最多有多少个。

输入描述:

第一行一个整数n。
第二行n个整数,第i个整数a

i

代表原项链上第i个珠子上的数字。

输出描述:

共一行一个整数,代表新项链的最大珠子数量。

输入例子:
5
9 3 9 1 1
输出例子:
5

-->

示例1

输入

5
9 3 9 1 1

输出

5
示例2

输入

9
7 8 6 5 4 3 1 2 15

输出

3

备注:

1 ≤ n ≤ 2e5,0<=ai<=1e9
////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////
 #include <bits/stdc++.h>
#define mst(a,b) memset((a),(b), sizeof a)
#define lowbit(a) ((a)&(-a))
#define IOS ios::sync_with_stdio(0);cin.tie(0);
#define MP make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+;
const int maxn=4e5+;
int n;
int a[maxn],ps[maxn];
int s[maxn],ma[maxn<<],mp[maxn<<];
bool manacher(int ne){
int len=ne*;
for(int i=;i<ne;++i)s[ne+i]=s[i];
int l=;
ma[l++]=-;ma[l++]=-;
for(int i=;i<len;++i)ma[l++]=s[i],ma[l++]=-;
ma[l]=-;
int mx=,id=;
for(int i=;i<l;++i){
mp[i]=mx>i?min(mp[*id-i],mx-i):;
while(ma[i+mp[i]]==ma[i-mp[i]])++mp[i];
if(mp[i]->=ne)return true;
if(i+mp[i]>mx)mx=i+mp[i],id=i;
}
return false;
}
int get(int st,int en){
if(en>n)return ps[n]^ps[st]^ps[en-n]^ps[];
return ps[en]^ps[st];
}
int main(){
#ifdef local
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&a[i]),ps[i]=ps[i-]^a[i];
for(int k=;k<=n;++k){
if(n%k!=)continue;
int ans=n/k;
for(int i=;i<k;++i){
for(int j=;j<ans;++j)
s[j]=get(j*k+i,(j+)*k+i);
if(manacher(ans))return *printf("%d",ans);
}
}
return ;
}

wannafly 挑战赛8 E 小G的项链(manecher)的更多相关文章

  1. Wannafly挑战赛7 C - 小Q与氪金游戏

    题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...

  2. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

  3. 【牛客Wannafly挑战赛12】小H和圣诞树

    题目 可以考虑边分治,对于某一种颜色,我们处理出分治边左右两边所有以这个颜色为端点的路径长度,之后随便拼一拼就好了 但是这样对于每一组询问都需要边分一遍,这样做复杂度是\(O(nm+n\log n)\ ...

  4. 牛客挑战赛 30 A 小G数数

    题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...

  5. Wannafly挑战赛10 D 小H的询问(线段树)

    题目链接  Problem D 这个题类似 SPOJ GSS3 做过那个题之后其实就可以秒掉这题了. 考虑当前线段树维护的结点 在那道题的基础上,这个题要多维护几个东西,大概就是左端点的奇偶性,右端点 ...

  6. 牛客挑战赛30 小G砍树 树形dp

    小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...

  7. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  8. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  9. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

随机推荐

  1. tp5框架用foreach循环时候报Indirect modification of overloaded element of think\paginator\driver\Bootst错误

    thinkphp5使用paginator分页查询数据后,需要foreach便利处理某一字段的数据,会出现类似题目的错误.主要是因为tp5使用分页类读取的数据不是纯数组的格式!所以在循环的时候需要用数据 ...

  2. html中的锚点设置

    html中的锚点 一.页面内跳转的锚点设置 页面内的跳转需要两步: 方法一: ①:设置一个锚点链接去找喵星人:(注意:href属性的属性值最前面要加#) ②:在页面中需要的位置设置锚点<a na ...

  3. python 类(2)

    """ """class BaseCat(object): """ 猫科基础类""&quo ...

  4. DAX/PowerBI系列 - 累计总计(Cumulative Total, Running Total)

    DAX/PowerBI系列 - 累计总计(Cumulative Total) 2017/07/23 更新:B列公式(见最后) 2019/08/08 更新:在可视化数据的时候,一定要选择日期维度的日期列 ...

  5. phpstudy配置多站点

    1.打开vhosts.conf文件     目录 Apache/conf/vhosts.conf #开启apache的vhost模块 (此模块默认是关闭的,去掉前面的#号) LoadModule vh ...

  6. 在springboot中使用拦截器

    在springMVC中可以实现拦截器,是通过实现HandlerInterceptor接口,然后在springmvc-web.xml中配置就可以使用拦截器了.在springboot中拦截器也是一样的思想 ...

  7. Vue常用修饰符

    Vue提供了事件修饰符用于DOM的事件处理,常用的事件修饰符有以下几个: (1). stop:阻止冒泡(通俗讲就是阻止事件向上级DOM元素传递) 点击内层div的结果: 点击外层div的结果: 修改代 ...

  8. git如何忽略特殊文件

    有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...

  9. MVVM框架简单实现

    众所周知当下是MVVM盛行的时代,从早期的Angular到现在的React和Vue,再从最初的三分天下到现在的两虎相争. 无疑不给我们的开发带来了一种前所未有的新体验,告别了操作DOM的思维,换上了数 ...

  10. LDP - Linux文档工程的简介,包括帮助,向导和文档

    总览 SYNOPSIS Linux文档工程(LDP)为Linux社区提供多种自由文档资源,包括向导 (guide),常见问答 (FAQ),入门 (HOWTO) 以及手册页 (man-pages). 作 ...