Codevs 1247 排排站
FJ的N头奶牛有一些共同之处(1 <= N <= 100,000)。FJ可以将这N头奶牛通过K种特征来归类(1 <= K <= 30)。例如,一些奶牛表现出来的特征1可能是有斑点,特征2可能是较之于PASCAL更喜欢C,等等。
FJ发明了一种简明的描述特征的方法——“特征码”,用一个长度为k的二进制串来表示这头牛的特征表现。例如,一头牛的“特征码”为13,转换为二进制就是1101,代表这头牛具有特征1、3、4 (从右读到左),但是不表现特征2。总的说来,如果这头奶牛表现特征i,那么我们在他的“特征码”的二进制的第i位就为1。
FJ将奶牛排成了一个1..N的队列,他注意到一种确定的排列方法可以使奶牛们的表现更“平衡”。一个连续的i..j的范围平衡表示为如果K种特征都有同样多的奶牛来表现。FJ想知道他究竟可以排出一个多长的“平衡”队列。请帮助他。
第一行两个整数n和k
接下来n行每行一个整数
一个整数表示最大的长度
7 3
7
6
7
2
1
4
2
4
/*
暴力,将所有特征数字转换为二进制后,存到a[][]数组里,然后竖着看,从每一头牛往下数,找以这头牛为起点的最大长度,这个暴力其实不用hash
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
#define mod 12200717
int n,m,a[maxn][],h[maxn][],ans;
using namespace std;
void change(int x){
int z=<<(m-),y=a[x][];
for(int i=;i<=m;i++){
if(y-z>=)y-=z,a[x][i]=;
else a[x][i]=;
z>>=;
}
}
void hash(int from,int len,int num){
h[from][num]+=a[from+len-][num];
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i][]);
change(i);
}
int now=;
for(int i=;i<=n;i++){//起点
if(n-i+<=ans)break;
for(int j=;j<=n-i+;j++){//长度
int len=j;
bool flag=;
hash(i,j,);
int st=h[i][];
for(int k=;k<=m;k++){//每头牛的信息
hash(i,j,k);
if(h[i][k]!=h[i][]){
flag=;
}
}
if(flag==)ans=max(ans,len);
}
}
printf("%d",ans);
}
40分 超时
/*
还是差分
因为对于符合条件的序列
有 sj0 - si0 = sj1 - si1 =...= sjk-1 - sik-1
也就是说 如果存在i j 满足
sj1 - sj0 == si1 - si0
sj2 - sj0 == si2 - si0
......
sjk-1 - sj0 == sik-1 - si0
我们定义c[i,j]=s[i,j]-s[i,0]
问题就转化成了 找隔得最远的ij 满足c[i] 和 c[j] 一样
这里用hash加速查找 给每个c[i] 搞一个hash值 放到hash表里
坑死我了,if(r<0) r=-r,查错查了一个小时
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define mod 1000003
int n,m,a[],sum[][],b[][],h[],ans;
int hash(int x){
int r=;
for(int i=;i<=m;i++)r=r%mod+b[x][i]<<;
if(r<)r=-r;
return r%mod;
}
int main(){
scanf("%d%d",&n,&m);
int x;
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if((<<(j-))&a[i])sum[i][j]=sum[i-][j]+;
else sum[i][j]=sum[i-][j];
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
b[i][j]=sum[i][j]-sum[i][];
}
}
memset(h,-,sizeof(h));
h[]=;
for(int i=;i<=n;i++){
int k=hash(i);
while(h[k]!=-){
int flag=;
for(int j=;j<=m;j++){
if(b[h[k]][j]!=b[i][j]){flag=;break;}
}
if(flag==&&i-h[k]>ans){ans=i-h[k];break;}
k++;
}
if(h[k]==-)h[k]=i;
}
printf("%d",ans);
}
100分
Codevs 1247 排排站的更多相关文章
- 1247 排排站 USACO(查分+hash)
/* 暴力查分 n*n */ #include<cstdio> #include<cstring> #include<iostream> #define maxn ...
- [poj3274]排排站(Hash)
题目:http://poj.org/problem?id=3274 题目大意:http://www.wikioi.com/problem/1247/ (此题中文版) 分析: 令sum[i][j]表示a ...
- 如何在Dreamweaver中使用emmet
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3666 一.emmet ...
- 【转】准确理解CSS clear:left/right的含义及实际用途
零.说点什么 好久没更新了.并不是在折腾什么大作,而是广度学习与实践中,加上婚礼等诸多大事,所以产出较少. 今天这篇也只是小作,博客是自己很好的学习工具,只要我学习不止,博客也会不断更新的. 我们平时 ...
- 使用RoboCopy 命令
经常进行文件管理操作的朋友们,不满意于Windows系统内置的复制功能,因为它太龟速了.于是大家就使用FastCopy.TeraCopy之类的软件来加速复制,但是你是否知道Windows 7已经内置快 ...
- 武汉科技大学ACM:1003: 看美女
Problem Description “排排站,赏美女……” YJ师兄在今年牡丹江赛区人品爆发,怒摘银奖,心情倍好,现组织大家去黄家湖边站成一排看美女 ^.^ N个人站成一排.不巧,美女们只在队伍的 ...
- DRP学习进化模型
曾经做的就是按照思维做的三级制,这是U .B ,D .坐在坐,开始增加设计模式,增加sqlhelper ,逐渐了解系统可分为只三层,层的,随着学习的不断深入明确了"为什么会出现分层" ...
- Robocopy 轉帖
实例一:文件,想怎么复制就怎么复制 [实现效果] 随时将源文件夹中的纯文本(TXT).Word文档(DOC)还有BMP.TIF图像文件复制到目标文件夹中 ,这是在"资源管理器"中直 ...
- Knowledge_SPA——精研查找算法
首先保证这一篇分析查找算法的文章,气质与大部分搜索引擎搜索到的文章不同,主要体现在代码上面,会更加高级,会结合到很多之前研究过的内容,例如设计模式,泛型等.这也与我的上一篇面向程序员编程--精研排序算 ...
随机推荐
- P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- csslint
http://csslint.net/ line column title description browserwarning 1 1 Disallow @import @import preven ...
- delphi android 录像(使用了JMediaRecorder,MediaRecorder的使用方法)
delphi xe系列自带的控件都无法保存录像,经网友帮忙,昨天终于实现了录像功能(但有个问题是录像时无画面显示),程序主要使用了JMediaRecorder,MediaRecorder的使用方法可参 ...
- mongodb学习之:文档操作
在上一章中有讲到文档的插入操作是用insert的方法.如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档 用find的方法可以查找所有的集合数据 > db.maple.find( ...
- Linux就该这么学--命令集合3(文本文件编辑命令)
1.cat命令查看纯文本文件(较短):(cat [选项] [文件]) cat -n showpath.sh 附录: -n 显示行号 -b 显示行号(不包括空行) -A 显示出“不可见”的符号,如空格, ...
- 最新版本号MYSQL官网下载地址可是必需要注冊后才干下载
因mysql5.0上运行函数不行,决定安装最新版本号的mysql,在网上找了些绿色版的.安装总报1067错误,网上的各种方法都试了,就是不行.浪费时间不说.郁闷死了,最后决定去官网,官 ...
- TMS320C6478+MCP2515
调一个驱动,将看过的资料记录下来. 这个驱动写得比较直观:http://www.51hei.com/bbs/dpj-114085-1.html
- [haoi2014]穿越封锁线
这题需要注意的一点是射线法需要考虑边界,而且题目对边界的限制极为严格. dcmp(v[i%n].x-x)<=0&&dcmp(v[(i+1)%n].x-x)>0 dcmp(v ...
- jquery特效(1)—点击展示与隐藏全文
下班了~~~我把今天整理的一个jquery小特效发一下,个人觉得比较简单,嗖嗖的就写出来了~~~ 下面先来看最终的动态效果: 一.来看一下主体框架程序: <!DOCTYPE html> & ...
- WebDriver API——延时操作及元素等待
在自动化测试过程当中,受网络.测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作. 一般有这么几种方式: 1.implicitlyWait.识别对象 ...