POJ3274-Gold Balanced Lineup
题目链接:点击打开链接
Gold Balanced Lineup
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 16978 | Accepted: 4796 |
Description
Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow down the list of features shared by his cows to a list of only K different features (1 ≤ K ≤ 30). For example, cows exhibiting feature #1 might have spots, cows exhibiting feature #2 might prefer C to Pascal, and so on.
FJ has even devised a concise way to describe each cow in terms of its "feature ID", a single K-bit integer whose binary representation tells us the set of features exhibited by the cow. As an example, suppose a cow has feature ID = 13. Since 13 written in binary is 1101, this means our cow exhibits features 1, 3, and 4 (reading right to left), but not feature 2. More generally, we find a 1 in the 2^(i-1) place if a cow exhibits feature i.
Always the sensitive fellow, FJ lined up cows 1..N in a long row and noticed that certain ranges of cows are somewhat "balanced" in terms of the features the exhibit. A contiguous range of cows i..j is balanced if each of the K possible features is exhibited by the same number of cows in the range. FJ is curious as to the size of the largest balanced range of cows. See if you can determine it.
Input
Line 1: Two space-separated integers, N and K.
Lines 2..N+1: Line i+1 contains a single K-bit integer specifying the features present in cow i. The least-significant bit of this integer is 1 if the cow exhibits feature #1, and the most-significant bit is 1 if the cow exhibits feature #K.
Output
Line 1: A single integer giving the size of the largest contiguous balanced group of cows.
Sample Input
7 3
7
6
7
2
1
4
2
Sample Output
4
Hint
In the range from cow #3 to cow #6 (of size 4), each feature appears in exactly 2 cows in this range
题目大意:n头牛,有k种特征。给出每种奶牛的ID,他的二进制的1的位数表示他有哪个特征,求奶牛每种特征出现次数相同的连续最长长度。
解释:
思路:看了题解理解了。根据条件:区间每种特征出现次数相同。用sum[i][j]表示从1到i头牛的j特征出现的次数。那么就有:sum[i][0] - sum[j][0] = sum[i][1] - sum[j][1] = ......= sum[i][k-1] - sum[j][k-1] 上式可以改写为:sum[i][k-1] - sum[i][0] = sum[j][k-1] - sum[j][0] 令C[i][Y] = sum[i][Y] - sum[i][0] (0<Y<k) 初始条件C[0][Y] = 0 所以只需要求 C[i][] == C[j][] 中j-i的最大值
AC代码:
#include<iostream>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
const int N=100010;
const int inf=1<<29;
int n,k,tz[N][40],ms[N][40],sum[N][40],key[N],ans;
vector<int>a[N];//
void search(int knum,int id) {
int len=a[knum].size();
for(int j=0; j<len; ++j) {//这种key里的id的C数组的数字是否全部一样
int f=1;
for(int l=0; l<k; ++l)
if(ms[a[knum][j]][l]!=ms[id][l]) {
f=0;
break;
}
if(f) {
ans=max(ans,id-a[knum][j]);
return;
}
}
a[knum].push_back(id);//这种key里所有的id
}
int main() {
int t,i,j;
scanf("%d%d",&n,&k);//得到sum数组
for(int i=1; i<=n; ++i) {
scanf("%d",&t);
for(int j=0; j<k; ++j) {
tz[i][j]=t%2;
t/=2;
}
}
for(i=0; i<N; ++i) a[i].clear();
a[0].push_back(0);
for(i=1; i<=n; ++i) {//得到C数组 并且求得每一头牛的哈希值
for(j=0; j<k; ++j) {
sum[i][j]=sum[i-1][j]+tz[i][j];
ms[i][j]=sum[i][j]-sum[i][0];
key[i]+=ms[i][j];
}
key[i]=abs(key[i])%N;
}
for(i=1; i<=n; ++i) search(key[i],i);//搜
printf("%d",ans);
return 0;
}
以上的代码比较好理解,上面的解释参考了两位神犇的博客:
还有一道与该题思路一样的题目:点击打开链接 可以对比理解
POJ3274-Gold Balanced Lineup的更多相关文章
- poj3274 Gold Balanced Lineup(HASH)
Description Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been abl ...
- POJ 3274 Gold Balanced Lineup
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...
- 哈希-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 ...
- 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 S ...
- 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练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...
- Gold Balanced Lineup POJ - 3274
Description Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been abl ...
- POJ 3274 Gold Balanced Lineup 哈希,查重 难度:3
Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow ...
- Gold Balanced Lineup(哈希表)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10711 Accepted: 3182 Description Farm ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列——map+hash+转换
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...
随机推荐
- BEC listen and translation exercise 42
These were built for the workers towards the end of the eighteenth century, and they are still furni ...
- 一种解决 MacBook 里的 App Store 无法登录的问题
刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功(网络链接都是好的),导致软件都无法更新,折腾了挺 ...
- Struts2 - 配置文件中result 节点详解
每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. 每个 action 声明都必须包含有数量足够多的 result 元素, 每个 resul ...
- 【leetcode刷题笔记】Roman to Integer
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- freeMarker(一)——freeMarker简介
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net FreeMarker简介: FreeMarker 是一款 模板引擎: ...
- Maven发布项目丢失Mybatis Mapper包的映射问题
由于一些eclipse版本问题,mybatis的mapper包中的sql文件没有被打进包,需要在pom中加入: <build> <!--配置打包时不过滤非java文件开始 --> ...
- Agc_006 E Rotate 3x3
题目大意 给定一个$3\times N$的方阵,每个位置的数恰好是每一个$[1,3\times N]$中的数. 初始时,每个位置$[x,y]$填的是$3(y-1)+x,(1\leq x\leq N,1 ...
- POJ1995:Raising Modulo Numbers
二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:http://poj.org/problem?id=1995 题目就是求\(\su ...
- CentOS 6.X 安装 EPEL 源
CentOS 6.X 自带的软件源可选的并不多,有时候要找到一个偏门一些的软件,用命令一搜怎么都没有源,考虑到使用软件源配合 yum 命令安装可以自动安装依赖,所以加一个新的软件源迫在眉睫. 考虑到同 ...
- Asp.net工作流workflow实战之书签(二)
1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...