首页 > 试题广场 >

谁是你的潜在朋友

[编程题]谁是你的潜在朋友
  • 热度指数:16322 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。     首先你对借阅记录进行了一番整理,把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”(即悲剧,^ ^)
示例1

输入

4  5
2
3
2
1

输出

1
BeiJu
1
BeiJu

python解法,使用Counter

from collections import Counter
while True:
    try:
        a,b=map(int,input().split())
        res=[]
        for i in range(a):
            res.append(int(input()))
        c=Counter(res)
        for i in res:
            print(c[i]-1 if c[i]>1 else "BeiJu")
    except:
        break
发表于 2017-10-17 17:58:27 回复(0)
#include<iostream>
(720)#include<cstdio>
#include<map>

using namespace std;

int main(){
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF){
        map<int,int> book_num;//map<书编号,人数>
        map<int,int> stu_book;//map<读者号,书编号>
        for(int i=0;i<n;i++){//第i个读者
            int bookNumber;
            scanf("%d",&bookNumber);
            stu_book[i]=bookNumber;//第i个读者喜欢看的书编号为bookNumber;
            book_num[bookNumber]++;//同时把喜欢看书编号为bookNumber的人数+1
        }
        map<int,int>::iterator it;
        for(it=stu_book.begin();it!=stu_book.end();it++){//读者号从0~n-1
            int num=book_num[it->second]-1;//把自己减掉
            if(num==0){
                printf("BeiJu\n");
            }else{
                cout<<num<<endl;
            }
        }
    }
    return 0;
}
发表于 2020-03-08 21:07:11 回复(0)
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        map<int,int>likeCount;//建立喜欢某本书的人数
        int reader[n];//记录读者最喜欢哪本书
        for(int i=0;i<n;i++)
        {
            int num;
            cin>>num;
            likeCount[num]++;
            reader[i]=num;
        }
        for(int i=0;i<n;i++)
        {
            if(likeCount[reader[i]]>1)//大于一说明至少有两个人喜欢这本书
                cout<<likeCount[reader[i]]-1<<endl;
            else
                cout<<"BeiJu"<<endl;
        }
    }
    return 0;
}

发表于 2022-03-21 11:18:26 回复(0)
#include<bits/stdc++.h>
using namespace std;
map<int ,int>num;
const int maxx=205;
int book[maxx];//存放读者i喜欢的书的编号
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            int x;
            cin>>book[i];
            x=book[i];
            num[x]++;//映射值加一;
        }
        map<int,int>::iterator it;
        for(int i=0;i<n;i++)
        {
            if(num[book[i]]==1)
                cout<<"BeiJu"<<endl;
            else
            {    
                int ans=num[book[i]]-1;
                cout<<ans<<endl;
            }
        }
        
    }
    return 0;
}

发表于 2020-04-02 17:44:40 回复(0)
#include<stdio.h>//1.直接全部的人进行比较除去自己跟自己比较
int main()//2.建立新数组 有相同的人数加一  人数为0则输出BeiJu
{
    int n,m,i,j,a[200],b[200],num;
    scanf("%d%d",&n,&m);//输入
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=n;i++)
    {
        num=0;
        for(j=1;j<=n;j++)
        {
            if(i!=j)//别跟自己比较
                if(a[i]==a[j])
                    num++;
        }
        b[i]=num;
    }
    for(i=1;i<=n;i++)
    {
        if(b[i]==0) printf("BeiJu\n");
        else printf("%d\n",b[i]);
    }
}

发表于 2020-03-31 11:54:05 回复(2)
//map加数组实现
#include<iostream>
(720)#include<cstdio>
#include<map>
using namespace std;
int main(){
    int m,n,x;
    int number[200];
    map<int,int>    myMap;
    while(scanf("%d%d",&n,&m)!=EOF){
        myMap.clear();
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            number[i]=x;
            myMap[x]++;
        }
        for(int i=0;i<n;i++){
            if(myMap[number[i]]==1)
                printf("BeiJu\n");
            else
                printf("%d\n",myMap[number[i]]-1);
        }
    }
    return 0;
}

发表于 2020-03-20 16:46:56 回复(0)
#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main(){ 
	int n,m;
	while(cin>>n>>m){
		vector<int> vec(n);
		map<int,int> ma;

		for(auto& a:vec){
			cin>>a;
			ma[a]++;
		}

		for(const auto& a:vec){
			auto& t =ma[a];
			if(t==1)
				cout<<"BeiJu"<<endl;
			else 
				cout<<t-1<<endl;
		}
	}
	return 0;
}
map和vector应用
编辑于 2020-02-26 18:58:44 回复(0)
终于有一题一次就过了,难道是我变强了吗🤭🤭🤭
#include "stdio.h"

int main(){
    int n, m, a[200],b[200],i,j;
    while(~scanf("%d%d",&n, &m)){
        for(i = 0; i < n; i++){
            scanf("%d",&a[i]);
            b[i] = 0;
        }
        //比较两个同学喜欢的书籍是否一致,
        //一致则将记录每个同学潜在好友数的数组+1
        for(i = 0;i < n; i++){
            for(j = 0; j < n; j++){
                if(a[i] == a[j]) b[i] += 1;
            }
            b[i] -= 1;//把兴趣和自己一样的自己剪掉
        }
        for(i = 0; i < n; i ++){
            if(b[i] == 0) printf("BeiJu\n");
            else printf("%d\n",b[i]);
        }
    }
    return 0;
}

发表于 2019-06-24 15:00:50 回复(1)
#include <cstdio>
#include <unordered_map>
#include <vector>
using namespace std;

const int MAXN = 300;
unordered_map<int, vector<int> > mp;
int friend_num[MAXN];

int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)  {
        int book;
        scanf("%d", &book);
        mp[book].push_back(i);
    }

    for (auto it = mp.begin(); it != mp.end(); it++) {
        for (int i = 0; i < it->second.size(); i++) {
            friend_num[it->second[i]] = it->second.size();
        }
    }

    for (int i = 1; i <= n; i++) {
        if (friend_num[i] == 1) printf("BeiJu\n");
        else printf("%d\n", friend_num[i] - 1);
    }
    return 0;
}
发表于 2019-03-11 15:06:47 回复(0)
感觉这题还是比较基础的hhh
#include<iostream>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    int* book=new int[n];
    for(int i=0;i<n;i++)
        cin>>book[i];
    int* friends=new int[n];
    for(int i=0;i<n;i++)
        friends[i]=0;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(book[i]== book[j]){
                friends[i]++;
                friends[j]++;
            }
        }
    }
    for(int i=0;i<n;i++){
        if(friends[i]==0)
            cout<<"BeiJu"<<endl;
        else
            cout<<friends[i]<<endl;
    }
}

发表于 2019-02-06 21:22:11 回复(1)
#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    int N,M,i=0;
    cin>>N>>M;
    int Stu[N];
    int Book_Stu[M];
    
    for(i=0;i<M;i++)
    Book_Stu[i]=0;

    for(i=0;i<N;i++){
        cin>>Stu[i];
        Book_Stu[Stu[i]]++;
    }
    for(i=0;i<N;i++){
        if(Book_Stu[Stu[i]]>1) cout<<Book_Stu[Stu[i]]-1<<endl;
        else cout<<"BeiJu"<<endl;

    }
    return 0;
}
发表于 2018-05-04 17:19:46 回复(0)
#include<stdio.h>
int main()
{
    int i,d;
    int N,M;
    while(scanf("%d %d",&N,&M)!=EOF)
    {
        int reader[201]={0},book[201]={0};
        for(i=1;i<=N;i++)
        {
             scanf("%d",&d);
             reader[i]=d;
             book[d]++;
        }
        for(i=1;i<=N;i++)
        {
            if(book[reader[i]]==1)
                printf("BeiJu\n");
            else printf("%d\n",book[reader[i]]-1);
        }
    }
    return 0;
}


发表于 2017-02-26 22:38:03 回复(1)
#include<iostream>
using namespace std;
int main(){
    int n,m;    
    cin>>n>>m;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];       
    }
    for(int i=0;i<n;i++){
        int count =0;
        for(int j=i+1;j<n;j++){
            if(a[i]==a[j]){
                count++;
            }
        }
        for(int j =0;j<i;j++){
            if(a[i]==a[j]){
                count++;
            }
        }
        if(count==0){
            cout<<"BeiJu"<<endl;
        }
        else
        cout<<count<<endl;
    }
}



发表于 2022-04-05 15:47:48 回复(0)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n, m, a[300];
	cin >> n;
	cin >> m;
	for(int i=0; i<n; i++)
		cin >> a[i];
	for(int i=0; i<n; i++)
	{
		if(count(a, a+n, a[i]) > 1)
			cout << count(a, a+n, a[i])-1 << endl;
		else
			cout << "BeiJu" << endl;
	}
	return 0;
}

发表于 2021-02-26 16:30:44 回复(0)
#include <iostream>
#include <algorithm>
using namespace std;
const int N=210;

int n,m;
int ren[N];//里面放他喜欢的书的编号
int fd[N];


int main() {
    
    scanf("%d%d",&n,&m);//N个读者,M本书
    for(int i=1;i<=n;i++){
        scanf("%d",&ren[i]);
    }

    for(int i=1;i<=n;i++){//一个读者一个读者的找
        for(int j=1;j<=n;j++){//每个读者遍历一遍
            if(ren[i]==ren[j] && (i!=j)){
                fd[i]++;//该读者朋友+1
            }
        }
    }

    for(int i=1;i<=n;i++){
        if(fd[i]!=0) printf("%d\n",fd[i]);
        else printf("BeiJu\n");
    }



    return 0;
}

编辑于 2024-02-15 15:20:55 回复(0)
#include <iostream>
using namespace std;
int stu[10010],books[210];
int main(int argc, char const *argv[])
{
	int n,m;
    scanf("%d %d",&n,&m);
	int fa_book;
	for(int i = 0;i<n;i++)
	{	
		scanf("%d",&fa_book);
		stu[i] = fa_book;
		books[fa_book]++;
	}
	int flag;
	for(int i = 0;i<n;i++){
		flag = books[stu[i]] - 1;
		if(flag == 0 )
			printf("BeiJu\n");
		else
			printf("%d\n",flag);
	}
	return 0;
}

发表于 2023-03-09 16:38:33 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] book = new int[m];
        int[] reader = new int[n];
        for(int i = 0; i < n; i++){
            reader[i] = sc.nextInt();
            book[reader[i]]++;
        }
        for(int i = 0; i < n; i++){
            if(book[reader[i]] == 1)
                System.out.println("BeiJu");
            else
                System.out.println(book[reader[i]]-1);
        }
        sc.close();
    }
}
发表于 2019-07-05 11:16:48 回复(0)
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main() {
   int n,m;
   while(cin>>n>>m){
    vector<int> v(n);
    for(int i=0;i<n;i++){
        int book;
        cin>>book;
        v[i] = book;
    }
    for(int i=0;i<n;i++){
        int num = count(v.begin(),v.end(),v[i])-1;
        num==0?cout<<"BeiJu"<<endl:cout<<num<<endl;
    }
   }
   return 0;
}

编辑于 2024-03-30 15:53:35 回复(0)
#include <iostream>
#include<map>
using namespace std;

int main() {
    int n,m;
    cin>>n>>m;
    map<int,int>book;
    map<int,int>person;
    for(int i=1;i<=n;i++){
        int t;
        cin>>t;
        person[i]=t;
        book[t]++;
    }
    for(int j=1;j<=n;j++){
        if((book[person[j]]-1)==0) cout<<"BeiJu"<<endl;
        else cout<<book[person[j]]-1<<endl;
    }
    return 0;
}

编辑于 2024-03-19 14:47:28 回复(0)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
#define pai 3.1415928
int main() {
    int n,m;
    while(cin>>n>>m) {
        int a[m],b[n],k;
        for(int i=0; i<m; i++) {//爱看i号书的人数 
            a[i]=0;
        }
        for(int i=0; i<n; i++) {
            cin>>b[i];
            a[b[i]]++;
        }
        for(int i=0; i<n; i++) {
            if(a[b[i]]==1)
                cout<<"BeiJu"<<endl;
            else
                cout<<a[b[i]]-1<<endl;
        }
    }

    return 0;
}

发表于 2024-03-06 17:46:19 回复(0)