bzoj 2081 [Poi2010]Beads
2081: [Poi2010]Beads
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 687 Solved: 246
[Submit][Status][Discuss]
Description
Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数,最后一块小于k的就不要拉(nc真浪费),保证珠子的长度为正整数。 Zxl喜欢多样的项链,为她应该怎样选择数字k来尽可能得到更多的不同的子串感到好奇,子串都是可以反转的,换句话说,子串(1,2,3)和(3,2,1)是一样的。写一个程序,为Zxl决定最适合的k从而获得最多不同的子串。 例如:这一串珠子是: (1,1,1,2,2,2,3,3,3,1,2,3,3,1,2,2,1,3,3,2,1), k=1的时候,我们得到3个不同的子串: (1),(2),(3) k=2的时候,我们得到6个不同的子串: (1,1),(1,2),(2,2),(3,3),(3,1),(2,3) k=3的时候,我们得到5个不同的子串: (1,1,1),(2,2,2),(3,3,3),(1,2,3),(3,1,2) k=4的时候,我们得到5个不同的子串: (1,1,1,2),(2,2,3,3),(3,1,2,3),(3,1,2,2),(1,3,3,2)
Input
共有两行,第一行一个整数n代表珠子的长度,(n<=200000),第二行是由空格分开的颜色ai(1<=ai<=n)。
Output
也有两行,第一行两个整数,第一个整数代表能获得的最大不同的子串个数,第二个整数代表能获得最大值的k的个数,第二行输出所有的k(中间有空格)。
Sample Input
21
1 1 1 2 2 2 3 3 3 1 2 3 3 1 2 2 1 3 3 2 1
Sample Output
6 1
2
HINT
Source
[Submit][Status][Discuss]
HOME Back
【分析】
题不是很难…应用到调和级数和哈希
嗯就是这样…哈希再套个map…虽然复杂度到了O(nlog^2),但还是能勉强卡过
【代码】
//bzoj 2081 beads
#include<bits/stdc++.h>
#define ll unsigned long long
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=200005;
map <ll,bool> mp;
int ans[mxn],a[mxn];
int n,num,tot,mx,calc;
ll hs[mxn],pw[mxn],ano[mxn];
inline int read()
{int x=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x;
}
int main()
{int i,j,k;n=read(),pw[0]=ano[n+1]=1;fo(i,1,n){a[i]=read();hs[i]=hs[i-1]*(n+1)+a[i];pw[i]=pw[i-1]*(n+1);}for(i=n;i>=1;i--) ano[i]=ano[i+1]*(n+1)+a[i];fo(k,1,n){tot=0,mp.clear();for(i=k;i<=n;i+=k){ll now=hs[i]-hs[i-k]*pw[k];ll tmp=ano[i-k+1]-ano[i+1]*pw[k];if(mp.count(now) || mp.count(tmp)) continue;mp[now]=true,tot++;}ans[k]=tot,mx=max(mx,tot);}
// fo(i,1,n) printf("test=%d\n",ans[i]);fo(i,1,n) if(ans[i]==mx) num++;printf("%d %d\n",mx,num);fo(i,1,n)if(ans[i]==mx){calc++;printf("%d",i);if(calc<num) printf(" ");}puts("");return 0;
}
bzoj 2081 [Poi2010]Beads相关推荐
- bzoj 2081: [Poi2010]Beads 哈希
题意 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数,最后 ...
- BZOJ 2081 Beads Hash
题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...
- BZOJ2081 [Poi2010]Beads
我们只要暴力枚举块的大小就可以了... 枚举的总复杂度是O(n / 1 + n / 2 + n / 3 + ...) = O(n * logn)的 何如去重呢...直接暴力hash再丢进set里搞定, ...
- POI2010 Beads
Beads Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数 ...
- 【bzoj2081】[Poi2010]Beads Hash
题目描述 Zxl有一次决定制造一条项链,她以非常便宜的价格买了一长条鲜艳的珊瑚珠子,她现在也有一个机器,能把这条珠子切成很多块(子串),每块有k(k>0)个珠子,如果这条珠子的长度不是k的倍数, ...
- BZOJ 2084 [Poi2010]Antisymmetry(manacher)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2084 [题目大意] 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过 ...
- BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)
洛谷上有这题,但是输出方案缺SPJ..(而且我也懒得输出方案了) 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2095 题解: 首先判 ...
- BZOJ 2084: [Poi2010]Antisymmetry(Hash+二分)
求一个01序列的子串取反并反转后与原串相同的个数. 很显而易见的是,反转的话只要子串对应的i和n-i+1位相反即可,这个看一下样例能很快看出来. 所以我们正着求一遍hash,反着取反然后求hash. ...
- BZOJ 2095 [Poi2010]Bridges 二分 最大流(混合图欧拉回路)
题目大意:给出一张n个点m条边的联通图,无重边,每条边有正反两个权值.现要从点1出发经过每条边每个点一次,问最大边权最小是多少. 最大最小容易想到二分,问题是如何判断是否有欧拉回路. 图不连通自然没有 ...
最新文章
- oracle全局索引 前缀索引_Oracle 分区索引介绍和实例演示
- centos iptables关于ping
- mysql 查询优化器跟踪_3. select语句执行过程-优化器
- 工程架构师对3月14号的白×××人节有什么看法??
- python3 open函数_python中open函数的基本用法示例
- silverlight5
- Ubuntu14.04LST安装weblogic11g
- python中怎么精确20位_Python中的精确处理
- 工业设计对计算机技术的应用,计算机在产品设计的应用
- php更新数据步骤,Thinkphp5模型更新数据方法
- 31 岁的我为何会在创业成功后选择编程?
- js空格占位符_灵活使用 console 让 js 调试更简单
- 【java读书笔记】——java开篇宏观把控 + HelloWorld
- 【RobotStudio学习笔记】(三)程序创建
- 【SW】利用3D打印机打印 PCB 钢网的方法
- 区块链技术学习路线图,区块链技术教程分享
- java遍历二级城市_java8用Lambda遍历省市区三级数据
- java 两张图片合成
- java 加权平均_java - 计算大数的加权平均值 - 堆栈内存溢出
- 华为如何不关闭进程_关闭华为手机后台程序的小技巧,终于知道了,再也不用担心内存了...
热门文章
- 物流仓储中先进的自动化系统 实现物料先进先出的自动化立体库
- 升级到Win 8之前必须关注的十个问题
- [Windows] IDM下载(已激活)
- 阳历(公历)转农历 1801-2099
- 时间格式化hh:mm:ss和HH:mm:ss区别
- 别让绑架式微信投票毁了朋友圈出现:去哪里给微信刷票、微信投票群怎么收费实属无奈
- 计算机专业笔记本电脑华为,2021适合计算机专业的笔记本电脑有哪些
- mysql AES加密存储,解密读取
- Piping OV7670 video to VGA output on ZYBO
- 达内教育扭亏为盈背后:私有化无限期搁置,市值缩水近2亿美元