2014年广东省青少年信息学竞赛中山市选拔赛 投票

本文介绍了一个投票程序的设计方案,该程序能够处理多个候选人和选民的投票情况,统计合法及非法投票,并按得票数和候选人编号排序输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题 投票
提交文件:vote.pas/c/cpp
输入文件:vote.in
输出文件:vote.out
问题描述
有n个候选人要竞选主席,有m个人要投票。每个人只能投一票,如果某个人投了超过一票或者不投票,那么这个人的投票将视为非法。
给出m个人的投票情况,你的任务是统计投票情况,然后按照获得投票数从高到低将候选人排序,如果获得的投票数相同,则按照候选人的输入顺序从小到大排序。

输入格式
第一行一个整数n,m(2<=n<=10, 1<=m<=1000),分别表示候选人的数量和投票人的数量。
接下来n行,每行有一个字符串,表示候选人的名字,保证字符串长度不超过100,且不包含”Invalid”这个名字。
接下来m行,每行一个长度为n的字符串,表示一个人的投票情况,字符串仅包含“X”和”.”。若字符串的第i个位置为”X”,则表示这个人给第i个候选人投一票。

输出格式
一共n+1行,前n行每行的信息分别为候选人的名字以及它所获的票占总票数的百分比,名字和百分比用一个空格隔开。其中百分比要四舍五入保留两位小数。
最后一行输出非法票数占总票数的比例,非法票数的名字用”Invalid”表示,具体看请看样例输出。

输入样例: 输出样例:
4 7
Loudy
Apples
Dogman
Miller
.X..
X…
….
..X.
..XX
..X.
..X. Dogman 42.86%
Loudy 14.29%
Apples 14.29%
Miller 0.00%
Invalid 28.57%

数据范围
100%的数据,n<=10,m<=1000

题解:

var
  sn:array[0..20] of ansistring;
  cn,cl:array[0..20] of longint;
  n,m,i,j,t,inv,l:longint;
  c:char;
  s:string;
begin
  assign(input,'vote.in');
  assign(output,'vote.out');
  reset(input);
  rewrite(output);
  readln(n,m);
  for i:=1 to n do
  begin
    readln(sn[i]);
    cl[i]:=i;
  end;
  for i:=1 to m do
  begin
    t:=0;
    for j:=1 to n do
    begin
      read(c);
      if c='X' then
      begin
        inc(t);
        l:=j;
      end;
    end;
    if t=1 then inc(cn[l]);
    readln;
  end;
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if (cn[j]>cn[i])or((cn[j]=cn[i])and(cl[j]<cl[i])) then
      begin
        cn[0]:=cn[i];
        cn[i]:=cn[j];
        cn[j]:=cn[0];
        sn[0]:=sn[i];
        sn[i]:=sn[j];
        sn[j]:=sn[0];
        cl[0]:=cl[i];
        cl[i]:=cl[j];
        cl[j]:=cl[0];
      end;
  inv:=m;
  for i:=1 to n do
  begin
    writeln(sn[i],' ',(cn[i]*100/m+0.001):0:2,'%');
    inv:=inv-cn[i];
  end;
  writeln('Invalid',' ',(inv*100/m+0.001):0:2,'%');
  close(input);
  close(output);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值