B - Gold Balanced Lineup解題報告(張浩盛倫)
題目連結:http://poj.org/problem?id=3274
解法型別:hash
解題思路:一道hash題啊,找key啊。當時做的時候覺得hash不好用,但它就是可以用hash優化,參考了一下別人的演算法,讓我對hash有了更深的領悟。首先把數轉化成二進位制矩陣,然後用一個陣列s[i][j]來儲存第j列的前i個數二進位制的和,再用一個陣列c[i][j]=s[i][j]-s[i][0],這樣,只要某兩行c[i][j]相同,那麼這兩行就可以算成一個contiguous balanced group。key就出來了,求和再取餘或相乘再取餘,隨你。。~
演算法實現:
//STATUS:C++_AC_969MS_27536K
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int MAXN=100010,MAX_HASH=99991;
int s[MAXN][30],c[MAXN][30];
int count(int a,int b);
int k;
struct NODE //連結串列寫hash表
{
struct NODE(){next=NULL;};
int num;
NODE *next;
}hash[MAX_HASH];
int main()
{
// freopen("in.txt","r",stdin);
int i,j,a,n,sumc,max;
while(~scanf("%d%d",&n,&k))
{
max=0;
memset(s,0,sizeof(s));
memset(hash,0,sizeof(hash));
NODE *p=(NODE*)malloc(sizeof(NODE));
hash[0].num=0,hash[0].next=p,p->next=NULL; //這個很重要,因為要考慮第一組的情況
for(i=1;i<=n;i++){
scanf("%d",&a);
for(j=0,sumc=0;j<k;j++){
s[i][j]=s[i-1][j]+((a&(1<<j))?1:0); //位運算二進位制
c[i][j]=s[i][j]-s[i][0];
sumc+=c[i][j];
}
int t=sumc%MAX_HASH;
if(t<0)t=-t;
NODE *p=&hash[t];
for(;p->next!=NULL;p=p->next){ //搜尋hash表
int ok=count(p->num,i);
if(ok!=-1 && ok>max)max=ok;
}
NODE *q=(NODE*)malloc(sizeof(NODE)); //搜尋hash表
p->num=i;
p->next=q;
q->next=NULL;
}
printf("%d\n",max);
}
return 0;
}
int count(int a,int b) //比較是否構成contiguous balanced group
{
int j;
for(j=0;j<k;j++){
if(c[a][j]!=c[b][j])return -1;
}
return b-a;
}
相關文章
- POJ 3264 Balanced Lineup【RMQ問題】MQ
- 【RMQ】poj 3264 Balanced LineupMQ
- POJ3264 Balanced Lineup【RMQ】MQ
- POJ 3264 Balanced Lineup(簡單的RMQ)MQ
- CF720B 解題報告
- POJ 3264-Balanced Lineup詳解(線段樹區間求值)
- POJ 3264-Balanced Lineup(RMQ-ST演算法)MQ演算法
- POJ 3264 Balanced Lineup 線段樹入門(點的查詢)
- [熵值] 解題報告熵
- [題解]SP10606 Balanced Numbers
- poj--3264Balanced Lineup+ST演算法求區間最大最小值演算法
- ARC173 解題報告
- P10499 解題報告
- 【演算法解題報告】求眾數演算法
- P11188 解題報告
- SP30906 解題報告
- Balanced Subsequences
- Dealroom:2022年B2B市場報告OOM
- 智倫報關係統人
- Leetcode 第136場周賽解題報告LeetCode
- 豐田汽車問題解決方法(A3報告)
- LeetCode Weekly Contest 96 解題報告LeetCode
- 11.1NOIP模擬賽解題報告
- Leetcode Weekly Contest 95解題報告LeetCode
- [題解]ARC176 A~B
- CF549B題解
- CF360B題解
- [題解]P3059 [USACO12NOV] Concurrently Balanced Strings G
- Episerver:2020年B2B網路體驗報告Server
- Demand Base:B2B營銷人工智慧使用情況報告人工智慧
- 詳解statspack 報告
- 國盛證券:2021年掃地機器人產業研究報告(附下載)機器人產業
- Codeforces Round #537 (Div. 2)解題報告
- Leetcode Weekly Contest94 解題報告LeetCode
- LeetCode解題報告 279. Perfect Squares [medium]LeetCode
- NYNU ACM 藍橋杯選拔賽 解題報告ACM
- 山東省第四屆acm解題報告(部分)ACM
- [leetcode] 252. Meeting Rooms 解題報告LeetCodeOOM