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练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
随机推荐
- CF778A(round 402 div.2 D) String Game
题意: Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. B ...
- 微信小程序 可用性一览
1. 调试vConsole微信小程序通过vConsole的形式观察控制台打印.打印到vConsole控制台的是由 JSON 转化的字符串.这还是可以起到调试作用的. Source Map当es6 转 ...
- Android如何用阿里云的API进行身份证识别
准备工作:在libs下添加 alicloud-Android-apigateway-sdk-1.0.1.jar,commons-codec-1.10-1.jar 在build.gradle添加 co ...
- XSS漏洞扫描经验分享
关于XSS漏洞扫描,现成的工具有不少,例如paros.Acunetix等等,最近一个项目用扫描工具没有扫出漏洞,但还是被合作方找出了几个漏洞.对方找出的漏洞位置是一些通过javascript.ajax ...
- Win2D 入门教程 VB 中文版
继续填坑!又一个c#教程变为vb! 这是我翻译的Win2D教程,链接保留了微软原版的. 如果文档有问题,可以在 https://github.com/Nukepayload2/Win2dDocVB发 ...
- leetcode_919. Complete Binary Tree Inserter_完全二叉树插入
https://leetcode.com/problems/complete-binary-tree-inserter/ 给出树节点的定义和完全二叉树插入器类的定义,为这个类补全功能.完全二叉树的定义 ...
- EasyX库进行图片绘制函数
引用函数:loadimage参数: // 从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)void loadimage( IMAGE* pDstImg, // 保存图像的 IMAG ...
- 使用Spring AOP切面解决数据库读写分离
http://blog.jobbole.com/103496/ 为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如 ...
- svn up 更新 校验和不匹配
BUNTU/Iproject/svn/dzradioclock-code/trunk/libs/dzlib/components/packages/DelphiXE2/dzComponentsR.dp ...
- python3 yum not found
vi /urs/bin/yum 将#!/usr/bin/python的python改为python2.x(你系统的python2的版本)