华为OD机试-垃圾短信识别-2022Q4 A卷-Py/Java/JS

大众对垃圾短信深恶痛绝,希望能对垃圾短信发送者进行识别,为此,很多软件增加了垃圾短信的识别机制。经分析,发现正常用户的短信通常具备交互性,而垃圾短信往往都是大量单向的短信,按照如下规则进行垃圾短信识别:
本题中,发送者A符合以下条件之一的,则认为A是垃圾短信发送者:
1:A发送短信的接收者中,没有发过短信给A的人数L> 5;
2:A发送的短信数 -A接收的短信数M > 10;
3:如果存在X,A发送给X的短信数 - A接收到X的短信数N >5.
输入描述
第一行是条目数,接下来几行是具体的条目,每个条目,是一对D,第一人数字是发送者ID,后面的数字是接收者ID,中间空格隔开,所有的ID都为 无符号整型Q,ID最大值为100:
同一个条目中,两个ID不会相同 (即不会自己给自己发消息)
最后一行为指定的ID

输出描述
输出该ID是否为垃圾短信发送者,并且按序列输出 L M 的值(由于 N 值不唯一,不需要输出)输出均为字符串。

示例1:

输入
15

1 2

1 3

1 4

1 5

1 6

1 7

1 8

1 9
1 10
1 11
1 12
1 13
1 14
14 1
1 15

1
输出
true 13 13

说明
true 表示1是垃圾短信发送者,两个数字,代表发送者1对应的L和M值。true 13 13中间以一个空格分割。注意true是字符电输出

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
 
class Main {
	public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
 
        int[][] id_pairs = new int[n][2];
        int[][] data = new int[100][100];
        for (int i = 0; i < n; i++) {
            id_pairs[i][0] = in.nextInt();
            id_pairs[i][1] = in.nextInt();
            data[id_pairs[i][0]][id_pairs[i][1]]+=1;
        }
    
        int id = in.nextInt();
 
        int L=0;
        int M1=0;
        int M2=0;
        boolean flag = false;
        for(int i=0;i<100;i++){
            if(data[id][i]>0 && data[i][id]==0){
                L++;
            }
            M1+=data[id][i];
            M2+=data[i][id];
            if(data[id][i]-data[i][id] > 5){
                flag = true;
            }
        }
        if(L>5 || M1-M2>10){
            flag = true;
        }
    
        System.out.println(flag + " " + L + " " + (M1-M2));
       
	}
 
}

Python代码

import functools
import collections
 
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
 
def get_shorter_time(a, b):
    if (a * 10 < b):
        return a * 10
    return b
 
#处理输入
n = int(input())
 
id_pairs = []
data = [[0 for x in range(100)] for x in range(100)]
for i in range(n):
    pair = [int(x) for x in input().split(" ")]
    data[pair[0]][pair[1]] += 1
 
id = int(input())
 
L=0
M1=0
M2=0
flag = False
for i in range(100):
    if(data[id][i]>0 and data[i][id]==0):
        L+=1
    
    M1+=data[id][i]
    M2+=data[i][id]
    if(data[id][i]-data[i][id] > 5):
        flag = True
 
if(L>5 or M1-M2>10):
    flag = True
 
 
print(str(flag) + " " + str(L) + " " + str(M1-M2))

JS代码

function main(n,id_pairs, id){
 
    let data = new Array(100);
    for (let i=0;i<100;i++){
        data[i] = new Array(100).fill(0);
    }
    for (let i = 0; i < n; i++) {
        data[id_pairs[i][0]][id_pairs[i][1]]+=1;
    }
 
    let L=0;
    let M1=0;
    let M2=0;
    let flag = false;
    for(let i=0;i<100;i++){
        if(data[id][i]>0 && data[i][id]==0){
            L++;
        }
        M1+=data[id][i];
        M2+=data[i][id];
        if(data[id][i]-data[i][id] > 5){
            flag = true;
        }
    }
    if(L>5 || M1-M2>10){
        flag = true;
    }
 
    console.log(flag.toString() + " " + L.toString() + " " + (M1-M2).toString())
}
 
main(15,[[1, 2],[1, 3],[1, 4],[1, 5],[1, 6],[1 ,7],[1 ,8],[1, 9],[1 ,10],[1 ,11],[1 ,12],[1, 13],[1 ,14],[14 ,1],[1 ,15]],1)

你可能感兴趣的:(java,开发语言,JavaScript,华为)