BZOJ1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
n<=100000个数表示每头牛在K<=30种物品的选取情况,该数在二进制下某位为0表示不选1表示选,求一个最大的区间使区间内选择每种物品的牛一样多。
数学转化,把不同状态间单变量的关系通过不等式移项转变为单状态的多变量关系。
sum[i,j]表示前i头牛有多少选了物品j,那么问题要求即对任意j∈[1,K],sum[p,j]-sum[q,j]相等,使p-q最大。(多状态,单变量)
列出来,sum[p,1]-sum[q,1]=sum[p,2]-sum[q,2]=……,移项,sum[p,2]-sum[p,1]=sum[q,2]-sum[q,1],sum[p,j]-sum[p,1]=sum[q,j]-sum[q,1],j∈[2,K]。
最后需要比较的就是每个i的sum[i,j]-sum[i,1]是否相同。(单状态,多变量)
找“最远的与当前数相同的数”,方法多样,这里用hash。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
//#include<iostream>
using namespace std; int n,K;
#define maxn 100011
typedef int state[];
#define maxh 100007
const int inf=0x3f3f3f3f;
int ans;
struct Hash
{
int first[maxh];
struct Node
{
state list;
int Max,Min;
int next;
}a[maxn];
int size;
Hash()
{
memset(first,,sizeof(first));
size=;
}
int hash(state s)
{
int v=;
for (int i=;i<K;i++)
v=(v*+s[i])%maxh;
return (v+maxh)%maxh;
}
bool equal(state a,state b)
{
for (int i=;i<K;i++)
if (a[i]!=b[i]) return ;
return ;
}
void insert(state s,int p)
{
int v=hash(s);
for (int i=first[v];i;i=a[i].next)
if (equal(s,a[i].list))
{
a[i].Max=max(a[i].Max,p);
ans=max(ans,a[i].Max-a[i].Min);
return;
}
int x=++size;
for (int i=;i<K;i++) a[x].list[i]=s[i];
a[x].Max=a[x].Min=p;
a[x].next=first[v];
first[v]=x;
}
}h;
state sum;
int x;
int main()
{
scanf("%d%d",&n,&K);
memset(sum,,sizeof(sum));
ans=;
h.insert(sum,);
for (int i=;i<=n;i++)
{
scanf("%d",&x);
int j=;
while (x)
{
sum[j]+=x&;
j++;x>>=;
}
state now;
for (int j=;j<K;j++)
now[j]=sum[j+]-sum[];
h.insert(now,i);
}
printf("%d\n",ans);
return ;
}
BZOJ1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列的更多相关文章
- 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 平衡的队列——map+hash+转换
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...
- 【BZOJ】1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
[题意]给定n头牛,k个特色,给出每头牛拥有哪些特色的二进制对应数字,[i,j]平衡当且仅当第i~j头牛的所有特色数量都相等,求最长区间长度. [算法]平衡树+数学转化 [题解]统计前缀和sum[i] ...
- [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
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 这个 ...
- 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13215 Accepted: 3873 ...
- POJ 3274 Gold Balanced Lineup
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...
- POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13540 Accepted: ...
- 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
随机推荐
- (4)《Head First HTML与CSS》学习笔记---文本的CSS规则和盒模型;div与span;<a>元素的链接色;伪类
1.每个font-family包含一组共同特征的字体.共五个字体系列: sans-serif----这个系列包括了没有衬线的字体,与serif相比,通常认为这个系列更容易在计算机上识读. serif- ...
- scala 通过jdbc访问mysql
scala是jvm语言,运行在jvm之上 我们知道jdbc是java访问数据库的技术,那么scala能不能通过jdbc操作数据库呢,答案是可以的 部分代码如下: /** * 获取连接 */ priva ...
- Java垃圾回收机制分析
Java的堆是一个运行时数据区,类的实例从中分配空间,堆中存储着正在运行的应用程序所建立的所有对象.垃圾回收是一种动态存储管理技术.它按照特定的垃圾回收算法,自动释放掉不再被引用的对象.堆内存里垃圾的 ...
- laravel之伪造跨站请求保护CSRF实现机制
Laravel 提供了简单的方法使你的应用免受 跨站请求伪造 (CSRF) 的袭击.跨站请求伪造是一种恶意的攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令. Laravel 为每个活跃用户 ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel
题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- Android(java)学习笔记180:多媒体之图形的变化处理
1. 图形的缩放 (1)布局文件activity_main.xml如下: <LinearLayout xmlns:android="http://schemas.android.com ...
- 屏幕卫士模式系统APP开发
利用php的socket编程来直接给接口发送数据来模拟post的操作,(黎灿:I8O..2853..296O 可电可V)线上线下和物流结合在一起,才会产生新零售. 2016年阿里云栖大会上,阿里巴巴马 ...
- centos nginx uwsgi django
doc link uwsgi link video link
- 分页语句where条件中的子查询有or关键字优化
背景 开发说: 有段SQL语句,去掉order by很快,有order by之后,查询1小时都无法返回结果. 我叫他把SQL扔给我看下. SQL代码及执行计划 select * from (selec ...
- rc-local.service服务启动失败,导致rc.local中的开机启动服务不能启动
chmod +x /etc/rc.d/rc.local 打开/etc/rc.local文件,将启动非后台执行的指令的最后添加 &,以使相关指令后台运行,然后启动服务 systemctl ...