列表

详情


NC243334. 走丢的小竹

描述

小竹太笨一直算不出来自己的年龄,一不留神走丢了。

妈妈很着急,这时劫匪打来了电话:"你儿子在我手里,请给我一百万,否则就不可能放你儿子走"。

妈妈哪里有那么多钱,但是她早就在小竹身上放了定位器,找到了劫匪的老窝。

妈妈发现劫匪窝除了关小竹的房间还有m个房间,小竹的房间有n个可以逃离的出口,每个出口连接着m个房间中的某一个。当一个出口连接的房间有劫匪时,该出口便不能逃离。

现在,妈妈想请你编写一个程序,求出有且仅有一位劫匪在 x 号房间时,n个出口中有多少个出口可以逃离。

由于劫匪身处的房间不是固定的,妈妈会进行 q 次询问。

输入描述

第一行三个整数 

第二行 n 个用空格隔开的整数,第 i 个整数为 ,表示编号为 i 的出口,连接着a_i号房间。

接下来 q 行,每行 一个用空格隔开的整数

输出描述

q 行, 每行一个整数,表示有多少个出口可以逃离。

示例1

输入:

5 2 2
1 2 2 1 2
1
2

输出:

3
2

说明:

劫匪在 1 号房间, 3 个连接 2 号房间的出口可以逃出
劫匪在 2 号房间, 2 个连接 1 号房间的出口可以逃出

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Go 解法, 执行用时: 271ms, 内存消耗: 8272K, 提交时间: 2023-08-12 22:50:29

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	var m, n, q int
	fmt.Scan(&n, &m, &q)
	inp := bufio.NewReader(os.Stdin)
	str, _ := inp.ReadString('\n')
	strl := strings.Split(str[:len(str)-1], " ")
	mp := make([]int, m+1)
	for _, s := range strl {
		v, _ := strconv.Atoi(s)
		mp[v]++
	}
	for i := 0; i < q; i++ {
		str, _ = inp.ReadString('\n')
		h,_:= strconv.Atoi(str[:len(str)-1])
		fmt.Println(n - mp[h])
	}
}

Python3 解法, 执行用时: 1021ms, 内存消耗: 15844K, 提交时间: 2023-08-12 22:49:29

n, m, q = map(int, input().split())
l = [n for _ in range(m+1)]
for i in map(int, input().split()):
    l[i]-=1
for _ in range(q):
    print(l[int(input())])

Java 解法, 执行用时: 1588ms, 内存消耗: 30756K, 提交时间: 2023-08-12 22:48:14

import java.util.Scanner;
public class Main
{
    public static void main(String[] args)
    {
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        int m = cin.nextInt();
        int q = cin.nextInt();
        int[] p = new int[100010];
        for (int i=1;i<=n;i++) {
            int t = cin.nextInt();
            p[t]++;
        }
        for (int i=1;i<=q;i++) {
            int t = cin.nextInt();
            System.out.println(n-p[t]);
        }
    }
}

上一题