タイトル説明
「においが似ている」-これは、友達を説明するときに使用したい言葉です。二人が友達であるということは、通常、彼らが多くの共通の利益を持っていることを意味します。しかし、オタクとして、お互いを知る機会はあまりないことに気づきます。幸いなことに、あなたは誤って北京大学図書館から本の借用記録のコピーを入手したので、潜在的な友人を見つけることを期待して、プログラムに遅れることを選択します。
まず、借用レコードを分類し、N人の読者に1、2、...、Nの番号を付け、M冊の本に1、2、...、Mの番号を付けます。同時に、「においが似ている」という原則に従って、あなたと同じ本を読みたい人はあなたの潜在的な友達です。今のあなたの仕事は、このローン記録から各人が何人の潜在的な友人を持っているかを計算することです。
入る
各ケースの最初の行に2つの整数N、M、2 <= N、M <= 200。次に、N行があり、i番目の行(i = 1,2、...、N)のそれぞれに、リーダーi-1の番号P(1 <= P <= M)を表す番号があります。愛読書
出力
各ケースにはN行が含まれ、それぞれに番号が付いています。i番目の行の番号は、潜在的な友達リーダーiの数を示しています。私と誰もが好きな本を共有していない場合は、「ベイジュ」を出力します(つまり、悲劇、^ ^)
サンプル入力コピー
4 5 2 3 2 1
サンプル出力コピー
1 ベイジュ 1 ベイジュ
ACコード
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 210;
int hashTable[N];
int book_id[N];
int main()
{
int n,m;
while (scanf("%d%d",&n,&m) != EOF)
{
for (int i = 0;i < n;i++)
{
scanf("%d",&book_id[i]);
hashTable[book_id[i]]++;
}
for (int i = 0;i < n;i++)
{
if (hashTable[book_id[i]] == 1) printf("BeiJu\n");
else printf("%d\n",hashTable[book_id[i]] - 1);
}
//多组数据输入,需要重新初始化数组,不然容易残留上一次输入的数据
memset(hashTable,0,sizeof hashTable);
memset(book_id,0,sizeof book_id);
}
return 0;
}
以下では
4 5
2
3
2
1
例えば:
配列インデックス:0 1 2 3 4
book_id:2 3 2 1
hashTable:0 1 2 1
hashTable配列の値は、本が表示される回数を表します。hashTable配列の値が1の場合、1人だけが本を気に入っていることを意味します。
if(hashTable [book_id [i]] == 1)printf( "BeiJu \ n");
それ以外の場合は、hashTable [book_id [i]]-1に等しい値の本を一緒に気に入った人の数を出力します。
else printf( "%d \ n"、hashTable [book_id [i]]-1);