有n個候選人要競選主席,有m個人要投票。每個人只能投一票,如果某個人投了超過一票或者不投票,那麼這個人的投票將視為非法。
給出m個人的投票情況,你的任務是統計投票情況,然後按照獲得投票數從高到低將候選人排序,如果獲得的投票數相同,則按照候選人的輸入順序從小到大排序。
模擬,然後排序
四捨五入**:
trunc((x*100)+0.5)/100
var
n,m,i,j,k:longint;
a,b:array[0..10]of longint;
c:array[1..10]of
string;
s:string;
procedure
qsort
(l,r:longint);
var i,j,key,key2,k,t:longint;
begin
if l>=r then
exit;
i:=l;j:=r;
k:=l+random(r-l+1);
key:=a[k];
key2:=b[k];
repeat
while (a[i]>key)or((a[i]=key)and(b[i]and(ido inc(i);
while (a[j]or((a[j]=key)and(b[j]>key2))and(j>l) do dec(j);
if i<=j then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
t:=b[i];b[i]:=b[j];b[j]:=t;
inc(i);dec(j);
end;
until i>j;
qsort(i,r);
qsort(l,j);
end;
begin
readln(n,m);
for i:=1
to n do
begin
readln(c[i]);
b[i]:=i;
end;
for i:=1
to m do
begin
readln(s);
j:=pos('x',s);
if j=0
then
begin inc(a[0]);continue;end;
delete(s,j,1);
if pos('x',s)=0
then inc(a[j])
else inc(a[0]);
end;
randomize;
qsort(1,n);
for i:=1
to n do
writeln(c[b[i]],' ',(trunc(((a[i]/m)*10000)+0.5)/100):0:2,'%');
writeln('invalid ',(trunc(((a[0]/m)*10000)+0.5)/100):0:2,'%');
end.
2465 中山市選2009 小球
題目鏈結 題目大意 n個球,每個球都有乙個分數,同時有m個瓶子,每個瓶子都有固定的容量和分數上界x 每個放進去的球分數必須小於等於x 求最多放進瓶子的球數以及在球最多的前提下的最高分數 題解 這個資料範圍明顯是網路流模板 基礎的貪心思路 因為不能浪費掉分數上界高的瓶子,所以瓶子按照分數上界排序,球按...
2466 中山市選2009 樹
題目鏈結 題目大意 給定一棵樹,每個點有乙個0 1的權,一次操作可以使得x和x的直接鄰居點權 1,初始均為0,求最少多少次操作可以全部變成1 題解 樹形dp可以o n 解決 但這不重要 考慮對每個點列出乙個xor方程,這樣就可以高斯消元了 但是有可能有自由元 暴力列舉代入計算 我的收穫 gauss暴...
2438 中山市選2011 殺人遊戲
題目鏈結 題目大意 有n個人,其中乙個是殺手,可以詢問一些人,如果是殺手就會死,如果是平民,他會告訴你他認識的人中有誰是殺手有誰是平民,求自身安全並知道殺手的概率最大是多少 題解 某個人是殺手的概率相等。考慮到每個scc只問乙個點就可以,進行縮點,縮點後每個scc對答案貢獻等價。知道誰是殺手相當於知...