L2-049 鱼与熊掌 - java

题目解析

判断给定的两个物品同时拥有的人数

解题思路

模拟即可

存储每个人拥有的物品种类
然后在每个人拥有的物品种类中判断是否拥有指定的物品

最后输出人数即可

代码

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args) throws IOException
	{
		int n = ini(), m = ini();
		ArrayList<Integer> res[] = new ArrayList[n + 10]; // 存储每个人拥有的物品种类
		for (int i = 1; i <= n; i++)
			res[i] = new ArrayList<Integer>();

		for (int i = 1; i <= n; i++)
		{
			int k = ini();
			for (int j = 1; j <= k; j++)
			{
				int x = ini();
				res[i].add(x); // 当前这个人增加新的物品种类
			}
		}

		int q = ini();
		while (q-- > 0)
		{
			int x = ini(), y = ini();
			int ans = 0;
			for (int i = 1; i <= n; i++)
			{
				int cnt = 0;
				for (int j = 0; j < res[i].size(); j++)
				{
					int z = res[i].get(j); // 当前这个人的物品
					if (z == x || z == y) // 当前物品是指定的
						cnt++;
					if (cnt == 2)
						break;
				}
				if (cnt == 2) // 如果当前这个人同时拥有指定的两种物品
				    ans ++;
			}
			out.println(ans);
		}

		out.flush();
		out.close();
	}

	static StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	static PrintWriter out = new PrintWriter(System.out);

	static int ini() throws IOException
	{
		sc.nextToken();
		return (int) sc.nval;
	}

}


团体程序设计天梯赛-练习集-java

赞赏