国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

POJ - 3274 Gold Balanced Lineup解題報告

2019-11-08 02:28:44
字體:
來源:轉載
供稿:網友
題目大意:給你n(100,000)個數,讓你把他們都變成k位(30)2進制的數,然后,讓你找到最長的該數列的一個子串(連續的),該子串滿足:這些數化為2進制的數之后,這k位,每位的1的個數相同。思路:

這個題用dp(k*n^2)就超時了。想辦法通過轉換數據,把原問題轉換成在很多數中查找相同數的問題,然后就可以用哈希表,把查找過程由O(n)變為O(1); 

#include<iostream>#include<math.h>#include<string.h>#include<stdio.h>#include<math.h>#define N 100500#define MOD 100000using namespace std;int n,k,m;bool a[N][30]={0};//第i個數的第j個二進制位為a[i][j] int b[N][30]={0};//第1個數到第i個數的第j二進制位一共有b[i][j]個1; int c[N][30]={0};//c[i][j]=b[i][j]-b[i][0]; int hash[N]={0};int next[N]={0};int s=0;void input(){	for(int i=1;i<=n;i++)	{		int x;		scanf("%d",&x);		for(int j=0;j<k;j++)		{			a[i][j]=x&1;			x=x>>1;		}	}}void ceshi1(){	for(int i=0;i<=n;i++)	{		for(int j=0;j<k;j++)		{			cout<<c[i][j]<<" ";		}		cout<<endl;	}}void init(){	for(int i=1;i<=n;i++)	{		for(int j=0;j<k;j++)		{			if(a[i][j]==1)			{				b[i][j]=b[i-1][j]+1;			}			else 			{				b[i][j]=b[i-1][j];			}		}	}	for(int i=1;i<=n;i++)	{		for(int j=0;j<k;j++)		{			c[i][j]=b[i][j]-b[i][0];		}	}}void find(int a,int b){	if(a>b)	{		int t;t=a;a=b;b=t;	}	for(int i=0;i<k;i++)	{		if(c[a][i]!=c[b][i])return;	}	if(s<b-a)s=b-a;	return;}void my_hash()//對c數組建立哈希表 {	for(int i=0;i<=n;i++)	{		int x=0;		for(int j=0;j<k;j++)		{			x=((x+c[i][j]*c[i][j])%MOD);		}		int u=hash[x];		find(0,i);		//cout<<x<<" ";		while(u)		{			find(u,i);//檢查c[u]和c[i]是否相等,如果相等,那是否可以更新max;			u=next[u];		}		next[i]=hash[x];		hash[x]=i;			}}int pf(int a,int b){	int x=1;	for(int i=0;i<b;i++)	{		x=x*a;	}	return x;}int main(){	while(cin>>n>>k)	{		s=0;		m=pf(2,k)-1;		memset(a,0,sizeof(a));		memset(b,0,sizeof(b));		memset(c,0,sizeof(c));		memset(hash,0,sizeof(hash));		memset(next,0,sizeof(next));		input();		init();		//ceshi1();		my_hash();		cout<<s<<endl;	}	}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 漳平市| 遵义县| 景洪市| 盘锦市| 吉木乃县| 泾川县| 闻喜县| 丰原市| 诸城市| 和田市| 黔东| 客服| 九龙城区| 德保县| 白朗县| 乐清市| 庄浪县| 增城市| 招远市| 岐山县| 灌阳县| 临清市| 夏河县| 恩施市| 赤城县| 莱西市| 兖州市| 哈巴河县| 高尔夫| 紫云| 晋宁县| 吴忠市| 合川市| 会宁县| 贡觉县| 梧州市| 石屏县| 永济市| 盱眙县| 鹰潭市| 紫阳县|