P7080 [NWRRC 2013] Ballot Analyzing Device

题目描述

平地的选举委员会正在为总统选举做准备。为了尽量减少人工因素在选票计数中的影响,他们决定开发一个自动化的选票分析设备(BAD)。 有 $n$ 名候选人竞选总统。选票上为每位候选人提供一个方框。选民必须在其中一个方框上做标记。如果没有标记任何方框或标记了两个或更多方框,则选票无效。每位选民将他的选票放入 BAD 的特殊扫描仪中。扫描仪分析选票上的标记并生成一个包含 $n$ 个字符的特殊投票字符串:标记的方框用 'X' 表示,未标记的用 '.' 表示。现在需要分析投票字符串以生成报告。你的任务是为 BAD 开发一个报告生成器。 给定所有选票的投票字符串,你的程序必须打印投票报告。报告中的候选人必须按得票数降序排列。如果两名候选人的得票数相同,他们在投票选票中的顺序也必须相同。对于每位候选人,计算他/她的得票百分比(如果候选人获得 $p$ 票,百分比结果为 $100p/m$)。报告的最后一行必须指明无效选票的百分比。

输入格式

第一行包含两个整数 $n$ 和 $m$ —— 候选人数和选票数($2 \le n \le 10$;$1 \le m \le 1000$)。接下来的 $n$ 行包含候选人的姓氏。每个名字是一个最多由 100 个英文字符组成的字符串。没有候选人名为 `Invalid`。 接下来是 $m$ 行,每行包含一个投票字符串。

输出格式

打印 $n+1$ 行。首先打印候选人的百分比结果。对于每位候选人,打印他/她的姓氏,后跟一个空格,然后是他/她的百分比结果和一个百分号 '% '。最后一行必须指定无效选票的百分比:一个单词 `Invalid` 后跟一个空格,无效选票的百分比和一个百分号。 将所有数字四舍五入到小数点后两位。如果数字正好在两个可表示数字的中间,输出较大的一个(例如,对于 $12.345$ 输出 `12.35`)。

说明/提示

时间限制:2 秒,内存限制:256 MB。 题面翻译由 ChatGPT-4o 提供。