Hash練習

九度1156  誰是你潛在的朋友

題目描述:

    “臭味相投”——這是我們描述朋友時喜歡用的詞彙。兩個人是朋友通常意味着他們存在着許多共同的興趣。然而作爲一個宅男,你發現自己與他人相互瞭解的機會並不太多。幸運的是,你意外得到了一份北大圖書館的圖書借閱記錄,於是你挑燈熬夜地編程,想從中發現潛在的朋友。
    首先你對借閱記錄進行了一番整理,把N個讀者依次編號爲1,2,…,N,把M本書依次編號爲1,2,…,M。同時,按照“臭味相投”的原則,和你喜歡讀同一本書的人,就是你的潛在朋友。你現在的任務是從這份借閱記錄中計算出每個人有幾個潛在朋友。

輸入:

    每個案例第一行兩個整數N,M,2 <= N ,M<= 200。接下來有N行,第i(i = 1,2,…,N)行每一行有一個數,表示讀者i-1最喜歡的圖書的編號P(1<=P<=M)

輸出:

    每個案例包括N行,每行一個數,第i行的數表示讀者i有幾個潛在朋友。如果i和任何人都沒有共同喜歡的書,則輸出“BeiJu”(即悲劇,^ ^)

樣例輸入:
4  5
2
3
2
1
樣例輸出:
1
BeiJu
1
BeiJu
#include<stdio.h>

int main(int argc, char* argv[])
{
	int n,m;
	while(scanf("%d %d",&n,&m)!=EOF)
	{
		//注意!!Hash的初始化賦值要放在while裏面,保證每次都重新對應賦值
		int Hash[200]={0};  //表示每個編號的讀者數
		int reader[200]; //表示每個讀者對應的書號
		int i;
		for(i=0;i<n;i++)
		{
			scanf("%d",&reader[i]);
			Hash[reader[i]]++;
		}
		for(i=0;i<n;i++)
		{
			if(Hash[reader[i]]==1)	printf("Beiju\n");
			else	printf("%d\n",Hash[reader[i]]-1);
		}
	}
	return 0;
}
九度1088 剩下的樹

題目描述:

    有一個長度爲整數L(1<=L<=10000)的馬路,可以想象成數軸上長度爲L的一個線段,起點是座標原點,在每個整數座標點有一棵樹,即在0,1,2,...,L共L+1個位置上有L+1棵樹。
    現在要移走一些樹,移走的樹的區間用一對數字表示,如 100 200表示移走從100到200之間(包括端點)所有的樹。
    可能有M(1<=M<=100)個區間,區間之間可能有重疊。現在要求移走所有區間的樹之後剩下的樹的個數。

輸入:

    兩個整數L(1<=L<=10000)和M(1<=M<=100)。
    接下來有M組整數,每組有一對數字。

輸出:

    可能有多組輸入數據,對於每組輸入數據,輸出一個數,表示移走所有區間的樹之後剩下的樹的個數。

樣例輸入:
500 3
100 200
150 300
470 471
樣例輸出:
298
#include<stdio.h>

int main(int argc, char* argv[])
{
	int l,m;
	while(scanf("%d %d",&l,&m)!=EOF)
	{
		int i,j;
		int Hash[10001]; 
		for(i=0;i<10001;i++){Hash[i]=1;} //初始化所有的位置都有樹,即爲1
		for(i=0;i<m;i++)
		{
			int x,y;
			scanf("%d %d",&x,&y);
			for(j=x;j<=y;j++)
			{
				Hash[j]=0;   //將區間內的哈希對應值賦0
			}
		}
		int count=0; //記錄樹的數量
		for(i=0;i<=l;i++)  //根據題目要求兩頭有樹,總爲l+1
		{
			if(Hash[i]==1)	count++;
		}
		printf("%d\n",count);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章