宇宙总统-洛谷 1781
2017-01-12 19:38
183 查看
题意:
宇宙总统竞选
地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竟选总统,现在票数已经统计完毕,请你算出谁能够当上总统。
输入格式:
president.in
第一行为一个整数n,代表竞选总统的人数。
接下来有n行,分别为第一个候选人到第n个候选人的票数。
输出格式:
president.out
共两行,第一行是一个整数m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入样例: 输出样例:
5 4
98765 1022356
12365
87954
1022356
985678
题解:
数据太大,可以用字符串数组来储存输入的n个数。注意Pascal字符串直接比较大小无法得出正确结果,可以用c[i]来放每个数的长度,以长度为第一关键字,字符串为第二关键字,进行排序。
排序可以用快排、冒泡等都可以。
时间复杂度O(n*n) 反正n很小。
var
n,i,j:longint;
a:array[0..20]of string;
b,c:array[0..20]of longint;
begin
readln(n);
for i:=1 to n do
begin
b[i]:=i;
readln(a[i]);
c[i]:=length(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if (c[i]<c[j])or((a[i]<a[j])and(c[i]=c[j])) then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
c[0]:=c[i];
c[i]:=c[j];
c[j]:=c[0];
end;
writeln(b[1]);
writeln(a[1]);
end.
题目背景
宇宙总统竞选
题目描述
地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竟选总统,现在票数已经统计完毕,请你算出谁能够当上总统。输入格式:
president.in
第一行为一个整数n,代表竞选总统的人数。
接下来有n行,分别为第一个候选人到第n个候选人的票数。
输出格式:
president.out
共两行,第一行是一个整数m,为当上总统的人的号数。
第二行是当上总统的人的选票。
输入样例: 输出样例:
5 4
98765 1022356
12365
87954
1022356
985678
题解:
数据太大,可以用字符串数组来储存输入的n个数。注意Pascal字符串直接比较大小无法得出正确结果,可以用c[i]来放每个数的长度,以长度为第一关键字,字符串为第二关键字,进行排序。
排序可以用快排、冒泡等都可以。
时间复杂度O(n*n) 反正n很小。
var
n,i,j:longint;
a:array[0..20]of string;
b,c:array[0..20]of longint;
begin
readln(n);
for i:=1 to n do
begin
b[i]:=i;
readln(a[i]);
c[i]:=length(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if (c[i]<c[j])or((a[i]<a[j])and(c[i]=c[j])) then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
c[0]:=c[i];
c[i]:=c[j];
c[j]:=c[0];
end;
writeln(b[1]);
writeln(a[1]);
end.