【BZOJ1702】[usaco2007margold]队列平衡
原来蛤习线性探测的时候要每次加一个稍大一点的数而不是每次+1……连蛤习都不会写,我tmd是有多弱
原题:
N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色,
每头牛有多种特色,用二进制01表示它的特色ID。比如特色ID为13(1101),则它有第1、3、4种特色。
所以,我们认为第i头牛有第J个特色,那么整数k的二进制的第j位 肯定是 1.
[i,j]段被称为平衡当且仅当K种特色在[i,j]内拥有 次数相同。
求能够平衡的最大的[i,j]段的长度。
这题附近都是蛤习,所以就往蛤习方面想了
然后想了一段时间无果,决定看题解,看了几个题解都没看懂,但是受到启发,最终脑补出正解
首先每一位求一下前缀和,两组前缀和相减就可以求得一段区间内的个数,然后给相邻两个前缀和做差,如果有两组前缀和元素之间的差都相等,这两组前缀和做差就可以使中间的值相等
恩可以这么理解,如果两组前缀和元素之间的差相等,那么一组前缀的每个元素到另一组前缀和的对应元素的delta是一样的(因为从一组到另一组相对差没变),这两组前缀和减一下,每个元素的差都相等(感觉有点差分的意思?)
然后有一些细节需要注意
首先需要设置一组全部为零的前缀和或前缀和的差,因为可能出现某一组前缀和里面所有元素都相等,这个时候就要和0减
因为添加元素0进去了,这时候0就有意义了,hash的初值就不能设成0
以及蛤习线性探测的时候要每次加一个稍大一点的数而不是每次+1
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int read(){int z=,mark=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mark=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mark;
}
int n,m,s[][];
int difference[][];
int maxx=;
int hash[],ha_top=;
bool check(int x,int y){
for(int i=;i<=m;i++) if(difference[x][i]!=difference[y][i]) return false;
return true;
}
int get_hash(int x){
int z=;
for(int i=;i<=m;i++) z=(z+difference[x][i]*+)%ha_top;
while(hash[z]!=- && !check(hash[z],x)){ z+=; if(z>ha_top)z%=ha_top;}
if(hash[z]==-){ hash[z]=x; return x;}
return hash[z];
}
void get_s(int x,int y){ for(int i=;y;i++,y>>=) s[x][i]+=y&;}
int main(){//freopen("ddd.in","r",stdin);
memset(s,,sizeof(s));
memset(difference,,sizeof(difference));
memset(hash,-,sizeof(hash));
cin>>n>>m;
get_hash();
for(int i=;i<=n;i++){
get_s(i,read());
for(int j=;j<=m;j++) s[i][j]+=s[i-][j],difference[i][j]=s[i][j]-s[i][j-];
maxx=max(maxx,i-get_hash(i));
}
/*for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cout<<s[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cout<<difference[i][j]<<" ";
cout<<endl;
}*/
cout<<maxx<<endl;
return ;
}
【BZOJ1702】[usaco2007margold]队列平衡的更多相关文章
- Heritrix源码分析(二) 配置文件order.xml介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/613412 本博客已迁移到本人独立博客: http://www.yun5u. ...
- Linux基础命令---防火墙iptables
iptables iptables指令用来设置Linux内核的ip过滤规则以及管理nat功能.iptables用于在Linux内核中设置.维护和检查IPv4数据包过滤规则表.可以定义几个不同的表.每个 ...
- Orleans核心功能
一.Grain持久性 二.定时器和提醒 三.依赖注入 四.观察者 五.无状态工作者Grains 六.流 一.Grain持久化 1,Grain持久化目标 ①允许不同类型的存储提供者使用不同类型的存储提供 ...
- BZOJ1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
n<=100000个数表示每头牛在K<=30种物品的选取情况,该数在二进制下某位为0表示不选1表示选,求一个最大的区间使区间内选择每种物品的牛一样多. 数学转化,把不同状态间单变量的关系通 ...
- 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 S ...
- 【BZOJ】1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
[题意]给定n头牛,k个特色,给出每头牛拥有哪些特色的二进制对应数字,[i,j]平衡当且仅当第i~j头牛的所有特色数量都相等,求最长区间长度. [算法]平衡树+数学转化 [题解]统计前缀和sum[i] ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列——map+hash+转换
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列【hash】
我%&&--&()&%????? 双模hashWA,unsigned long longAC,而且必须判断hash出来的数不能为0???? 我可能学了假的hash 这个 ...
- [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色,每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101),则 ...
随机推荐
- centos7的FTP服务vsftpd里建立虚拟用户不同目录分配不同权限
1. virtual_use_local_privs参数 当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限: 当virtual_use_local_privs ...
- HDU-3729 二分匹配 匈牙利算法
题目大意:学生给出其成绩区间,但可能出现矛盾情况,找出合理组合使没有说谎的人尽可能多,并按maximum lexicographic规则输出组合. //用学生去和成绩匹配,成绩区间就是学生可以匹配的成 ...
- python-day17--迭代器
1.迭代: 迭代就是一个一个一个挨着的取值 2.可迭代类型: str ,列表,元组,集合,字典 3.判断迭代器和可迭代的方法 #第一种:判断内部是不是实现了 __next__#'__next__' ...
- nyoj 1237 简单dfs
最大岛屿 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己 ...
- 3n+1问题中的几个小的注意点
3038 3n+1问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 3n+1问题是一个简单有趣而又没有 ...
- C# Winform程序以及窗体运行的唯一性汇总
经常看到有人讨论程序运行唯一性或者窗体运行的唯一性问题.我之前也写了一些文章,在此把它进行整理汇总. 如果是程序的唯一性问题,我之前的一篇文章已经写得很全面,可以参看. C# Winform如何使自己 ...
- java深浅拷贝
转载:http://atjava.iteye.com/blog/1722501 首先我们看看浅拷贝和深拷贝的定义 浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制 深拷贝:对象, ...
- 使用GAN 进行异常检测——anoGAN,TODO,待用于安全分析实验
先说实验成功的代码: git clone https://github.com/tkwoo/anogan-keras.git mkdir weights python main.py --mode t ...
- Cattle学习笔记
Cattle学习笔记
- json 与字符串相互转换,
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...