你必须编写一个程序来筛选你所收集到的这些信息,并判断哪些村民是在说真话,哪些村民是在说谎话。两个村的村民人数很多,所以你的程序必须能快速并有效的处理大量数据。
输入规范你的程序必须获取一个唯一的命令行参数,即文件的名称。打开文件并且解析里面的数据。这些数据以村民的数量 n 开头,行尾另起一新行。后面跟着是连续的 n 块信息,每块信息描述的是一个村民所举报的那些说谎者名单。每一块的格式如下:
<accuser name> <m>(其中:accuser name 表示举报人名字,m 表示被举报说谎的人数。)
而后紧跟 m 行,每一行包含一个被举报的人员名字。accuser name 和 m 被一些制表符(tab)和空格隔开。m 总是在 [0, n] 区间。所有人员的名字只包含字母且是唯一的并区分大小写。
输入文件示例:
5
Stephen 1
Tommaso
Tommaso 1
Galileo
Isaac 1
Tommaso
Galileo 1
Tommaso
George 2
Isaac
Stephen
输出规范你的程序输出必须由两个数字组成,数字之间由一个空格隔开,结尾另起一新行(换行符为 "\n"),打印至标准输出。第一个数字是说谎者和诚实者中人数较多的一组人数; 第二个数字是人数较少的一组人数。我们保证这些测试数据只有一个正确的解决方法。
输出示例如下: 3 2
这是一家公司贴在网上的笔试题,我觉得有问题,如果按我下面的测试数据根本推不出说谎者小组或者诚实者小组的人数。
test.txt:
6
A 2
B
C
B 1
A
C 1
A
D 2
E
F
E 1
D
F 1
D
因为ABC与DEF根本属于两个毫无关联的关系网,只能确定A与BC不在一组,也能确定D与EF不在一组,但是A与DEF的关系却确定不了。因此人数也不能确定 因为不知道A 跟另一个关系网里面的D是一组 还是EF是一组。
我跟他们公司的技术人员联系沟通后,他们解释是已经说明了”我们保证这些测试数据只有一个正确的解决方法。“, 不过我还是觉得这个题目本身是错误的。。。。