【2023】华为OD机试真题Java CC++ Python JS Go-题目0245-信号发射和接收
发布人:shili8
发布时间:2024-02-03 20:13
阅读次数:71
题目0245-信号发射和接收问题描述:
在一个信号发射和接收系统中,有多个信号发射器和接收器。每个信号发射器都有一个唯一的ID和一个信号发射范围。每个接收器也有一个唯一的ID和一个接收范围。当一个信号发射器的信号范围内有一个或多个接收器时,这些接收器都会接收到该信号。现在给定所有信号发射器和接收器的信息,请你计算有多少个接收器会接收到至少一个信号。
输入:
输入包含多组测试数据。每组数据第一行包含一个整数n(1≤n≤1000),表示信号发射器的数量。接下来n行,每行包含两个整数x和y(0≤x,y≤1000),分别表示信号发射器的ID和信号发射范围。接下来一行包含一个整数m(1≤m≤1000),表示接收器的数量。接下来m行,每行包含两个整数x和y(0≤x,y≤1000),分别表示接收器的ID和接收范围。输入保证所有ID都是唯一的。
输出:
对于每组测试数据,输出一个整数,表示至少有一个信号被接收到的接收器数量。
示例:
输入:
21223312233421223212233122334输出:
3223示例解释:
第一组数据中,信号发射器1的范围内有接收器1和2,信号发射器2的范围内有接收器2和3,所以一共有3个接收器接收到了信号。
第二组数据中,信号发射器1的范围内有接收器1和2,信号发射器2的范围内有接收器2和3,所以一共有2个接收器接收到了信号。
javaimport java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int[][] transmitters = new int[n][2]; for (int i =0; i < n; i++) { transmitters[i][0] = sc.nextInt(); transmitters[i][1] = sc.nextInt(); } int m = sc.nextInt(); int[][] receivers = new int[m][2]; for (int i =0; i < m; i++) { receivers[i][0] = sc.nextInt(); receivers[i][1] = sc.nextInt(); } int result = countReceivers(transmitters, receivers); System.out.println(result); } } public static int countReceivers(int[][] transmitters, int[][] receivers) { int count =0; for (int i =0; i < receivers.length; i++) { for (int j =0; j < transmitters.length; j++) { int distance = (receivers[i][0] - transmitters[j][0]) * (receivers[i][0] - transmitters[j][0]) + (receivers[i][1] - transmitters[j][1]) * (receivers[i][1] - transmitters[j][1]); if (distance <= transmitters[j][1] * transmitters[j][1]) { count++; break; } } } return count; } }
def countReceivers(transmitters, receivers): count =0 for receiver in receivers: for transmitter in transmitters: distance = (receiver[0] - transmitter[0]) **2 + (receiver[1] - transmitter[1]) **2 if distance <= transmitter[1] **2: count +=1 break return countwhile True: try: n = int(input()) transmitters = [] for _ in range(n): transmitters.append(list(map(int, input().split()))) m = int(input()) receivers = [] for _ in range(m): receivers.append(list(map(int, input().split()))) result = countReceivers(transmitters, receivers) print(result) except: break
cpp#include <iostream> #include <vector> #include <cmath> using namespace std; int countReceivers(vector<vector<int>>& transmitters, vector<vector<int>>& receivers) { int count =0; for (auto receiver : receivers) { for (auto transmitter : transmitters) { int distance = pow(receiver[0] - transmitter[0],2) + pow(receiver[1] - transmitter[1],2); if (distance <= pow(transmitter[1],2)) { count++; break; } } } return count; } int main() { int n, m; while (cin >> n) { vector<vector<int>> transmitters(n, vector<int>(2)); for (int i =0; i < n; i++) { cin >> transmitters[i][0] >> transmitters[i][1]; } cin >> m; vector<vector<int>> receivers(m, vector<int>(2)); for (int i =0; i < m; i++) { cin >> receivers[i][0] >> receivers[i][1]; } int result = countReceivers(transmitters, receivers); cout << result << endl; } return0; }
javascriptfunction countReceivers(transmitters, receivers) { let count =0; for (let receiver of receivers) { for (let transmitter of transmitters) { let distance = Math.pow(receiver[0] - transmitter[0],2) + Math.pow(receiver[1] - transmitter[1],2); if (distance <= Math.pow(transmitter[1],2)) { count++; break; } } } return count; } while (true) { let n = parseInt(readline()); if (isNaN(n)) { break; } let transmitters = []; for (let i =0; i < n; i++) { transmitters.push(readline().split(' ').map(Number)); } let m = parseInt(readline()); let receivers = []; for (let i =0; i < m; i++) { receivers.push(readline().split(' ').map(Number)); } let result = countReceivers(transmitters, receivers); print(result); }
gopackage mainimport ( "fmt" "math" ) func countReceivers(transmitters [][]int, receivers [][]int) int { count :=0 for _, receiver := range receivers { for _, transmitter := range transmitters { distance := math.Pow(float64(receiver[0]-transmitter[0]),2) + math.Pow(float64(receiver[1]-transmitter[1]),2) if distance <= math.Pow(float64(transmitter[1]),2) { count++ break} } } return count} func main() { var n, m int for { _, err := fmt.Scan(&n) if err != nil { break} transmitters := make([][]int, n) for i :=0; i < n; i++ { transmitters[i] = make([]int,2) fmt.Scan(&transmitters[i][0], &transmitters[i][1]) } fmt.Scan(&m) receivers := make([][]int, m) for i :=0; i < m; i++ { receivers[i] = make([]int,2) fmt.Scan(&receivers[i][0], &receivers[i][1]) } result := countReceivers(transmitters, receivers) fmt.Println(result) } }