poj3274
来源:互联网 发布:差旅费报销软件 编辑:程序博客网 时间:2024/05/01 11:48
- #include<iostream>
- #include<cmath>
- using namespace std;
- const int size=100001;
- const int mod=99991;
- int feature[size][30]; //feature[i][j]标记第i只牛是否有特征j
- int sum[size][30]; //从第1到第i只牛,特征j总共出现了sum[i][j]次
- int c[size][30]; //c[i][j]=sum[i][j]-sum[i][0] , 即所有列都减去第一列后,值保存在c[][]
- int N; //牛数量
- int K; //特征数
- int MaxLen; //最大距离
- typedef class HASH
- {
- public:
- int pi; //保存c[i][j]的行地址c[i]的下标i
- class HASH* next;
- HASH()
- {
- next=0;
- }
- }HashTable;
- HashTable* hash[mod];
- /*检查c[ai][]与c[bi][]是否对应列相等*/
- bool cmp(int ai,int bi)
- {
- for(int j=0;j<K;j++)
- if(c[ai][j]!=c[bi][j])
- return false;
- return true;
- }
- void Hash(int ci)
- {
- int key=0; //生成关键字
- for(int j=1;j<K;j++)
- key+=c[ci][j]*j;
- key=abs(key)%mod; //由于c[][]有正有负,因此key值可能为负数
- if(!hash[key]) //新key
- {
- HashTable* pn=new HashTable;
- pn->pi=ci;
- hash[key]=pn;
- }
- else //key值冲突
- {
- HashTable* pn=hash[key];
- if(cmp(pn->pi,ci))
- {
- int dist=ci-(pn->pi);
- if(MaxLen<dist)
- MaxLen=dist;
- return; //由于pi与ci对应列数字相等,且pi地址必定比ci小
- } //而要求的是最大距离,因此不需要保存ci,判断距离后直接返回
- else
- {
- while(pn->next)
- {
- if(cmp(pn->next->pi,ci))
- {
- int dist=ci-(pn->next->pi);
- if(MaxLen<dist)
- MaxLen=dist;
- return;
- }
- pn=pn->next;
- }
- //地址冲突但c[][]各列的值不完全相同
- HashTable* temp=new HashTable;
- temp->pi=ci;
- pn->next=temp;
- }
- }
- return;
- }
- int main(void)
- {
- freopen("in.txt","r",stdin);
- while(cin>>N>>K)
- {
- /*Initial*/
- for(int p=0;p<K;p++)
- {
- c[0][p]=0; //第0只牛的特征默认为全0
- sum[0][p]=0;
- }
- memset(hash,0,sizeof(hash));
- Hash(0); //把第0只牛先放入哈希表
- MaxLen=0;
- /*Input*/
- for(int i=1;i<=N;i++)
- {
- int Dexf; //十进制特征数
- cin>>Dexf;
- for(int j=0;j<K;j++)
- {
- feature[i][j]=Dexf%2; //Dexf转换为逆序二进制
- Dexf/=2;
- sum[i][j]=sum[i-1][j]+feature[i][j];
- c[i][j]=sum[i][j]-sum[i][0];
- }
- Hash(i);
- }
- /*Output*/
- cout<<MaxLen<<endl;
- }
- return 0;
- }
0 0
- POJ3274
- poj3274
- poj3274
- poj3274
- poj3274
- poj3274
- POJ3274
- poj3274
- poj3274 hash
- poj3274 hash
- Gold Balanced Lineup poj3274
- POJ3274 Gold Balanced Lineup
- poj3274 hash数组
- poj3274数位HASH
- poj3274 Gold Balanced Lineup
- [POJ3274]-Gold Balanced Lineup
- [POJ3274] Gold Balanced Lineup
- poj3274(数字hash)
- Hibernate系列学习之(二) 多对一、一对一、一对多、多对多的配置方法
- 【线段树】基本写法,区间极值,区间延迟更新,多延迟标签
- 在Eclipse中使用Axis2插件自动生成WSDL文件
- 虚拟机(VMware Workstation)的使用方法
- C++ Singleton + MultiThread
- poj3274
- 一个exe可执行程序的生与死
- cocos2d-x版本2.2.5的项目HelloWorld的代码流程走向
- UVA 10529 Dumb Bones 概率dp 求期望
- 解决ASM(Android Screen Monitor)打不开的问题
- MFC程序隐藏任务栏图标的三种方法
- C++STL 之 迭代器
- 关于socket与serversocket中的输入输出流
- C++之static的使用