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练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
随机推荐
- AJPFX关于Swing组件的总结
默认布局管理器是流式布局(FlowLayout) 按钮的建立: jb1=new JButton("香蕉") 面板的建立:jp1=new JPanel(); 设置JFrame的标题: ...
- JavaWeb ,EL,
WEB 概述: java web 是用java 技术来解决相关web 互联网领域的技术总和 . web 可分为 web服务器和web客户端(浏览器) web 的资源分类: 静态资源: HTM ...
- MySQL 当记录不存在时insert,当记录存在时更新
网上基本有三种解决方法. 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (clie ...
- re正则表达式公式讲解6
标识符 re.I (re.IGNORECASE) 忽略大小写 import re s = "Max@123uyt146" print(re.search("m" ...
- datetime 模块详解
1.import datetime 常用方法: ttimedelta() 括号里默认为days,进行别的单位运算可以加上如hours = 1这样.除了进行减法运算,还可以进行加法运算. >> ...
- JS进阶-特殊形式的函数-返回函数的函数/重写自己的函数
返回函数的函数 // 返回函数的函数 function a() { alert("aa"); return function () { alert("bb"); ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- 《Python基础教程》 读书笔记 第五章(上)条件语句
5.1 print和import的更多信息 5.1.1使用逗号输出 打印多个表达式也是可行的,只要将它们用逗号隔开就好: >>>print'age:',42 age: 42 要同时输 ...
- COGS 1. 加法问题 (水体日常)
这是一个经典的入门问题,通过此问题,你可以学会如何使用该评测系统. [问题描述] 现在有两个实数,分别是A和B.请你从文件中读取A和B,计算它们的和A+B,并把它输出到文件中.(保留到整数) [输入格 ...
- RPC(Remote Procedure Call Protocol)远程过程调用协议
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在 ...