var na,a:array[1..1000]of string;
b,c:array[0..2000]of longint;
n,i,j,maxlen,k:longint;
t:string;
function max1(x,y:ansistring):boolean;
begin
if length(x)>length(y) then exit(true)
else if length(x)<length(y) then exit(false)
else if x>y then exit(true)
else exit(false);
end;
function max2(x,y:ansistring):boolean;
begin
if length(x)>length(y) then exit(false)
else if length(x)<length(y) then exit(true)
else if x<y then exit(true)
else exit(false);
end;
procedure qsort;
procedure sort(l,r:longint);
var i,j:longint;
x:ansistring;
begin
i:=l;
j:=r;
x:=a[(l+r)div 2];
repeat
while max2(a[i],x) do inc(i);
while max1(a[j],x) do dec(j);
if not(i>j)then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
t:=na[i];
na[i]:=na[j];
na[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
begin
sort(1,n);
end;
function max(x,y:longint):longint;
begin
if x>=y then exit(x) else exit(y);
end;
procedure intoarray1(x:ansistring);
begin
for i:=1 to length(x) do
c[length(x)-i+1]:=ord(x[i])-ord(’0’);
c[0]:=length(x);
end;
procedure plus;
begin
maxlen:=max(b[0],c[0]);
for i:=1 to maxlen do
begin
b[i]:=b[i]+c[i];
b[i+1]:=b[i+1]+b[i] div 10;
b[i]:=b[i] mod 10;
end;
while b[i+1]<>0 do inc(i);
b[0]:=i;
if k<=n-1 then
begin
inc(k);
intoarray1(a[k]);
plus;
end;
end;
procedure intoarray(x:ansistring);
begin
for i:=1 to length(x) do
b[length(x)-i+1]:=ord(x[i])-ord(’0’);
b[0]:=length(x);
intoarray1(a[k+1]);
k:=k+1;
plus;
end;
begin
readln(n);
for i:=1 to n do
begin
readln(na[i]);
readln(a[i]);
end;
qsort;
for i:=1 to n-1 do
if(a[i]=a[i+1])and(na[i]<na[i+1]) then
begin
t:=na[i];
na[i]:=na[j];
na[j]:=t;
end;
for i:=n downto 1 do writeln(na[i]);
k:=1;
intoarray(a[k]);
for i:=490 downto 1 do write(b[i]);
end.
代码:
program rq168new;
type
muldat= record //高精度结构
len:integer;
w:array[1..2000] of integer;
end;
data= record //一个猪王的信息 姓名 猪肉量
name:string;
score:muldat;
end;
var
a:array[1..10000] of data;
i,n,j,k:longint;
all:muldat;
procedure readin;//读入每个数据
var
i,j,k:integer;
ch:char;
begin
readln(n);
for i:= 1 to n do
with a[i] do
begin
readln(name);
a[i].score.len:=0;
while not eoln do
begin
read(ch);
inc(a[i].score.len);
a[i].score.w[a[i].score.len]:=ord(ch)-ord(’0’);
end;
readln;
for j:=1 to a[i].score.len div 2 do
begin
k:=a[i].score.w[j];
a[i].score.w[j]:=a[i].score.w[a[i].score.len+1-j];
a[i].score.w[a[i].score.len+1-j]:=k;
end;
//if a[i].score.len>490 then a[i].score.len:=490;
end;
end;
function add(a,b:muldat):muldat; //高精度加高精度
var
i,k:integer;
begin
if a.len>b.len then k:=a.len else k:=b.len;
for i:= 1 to k do
begin
a.w[i]:=a.w[i]+b.w[i];
inc(a.w[i+1],a.w[i] div 10);
a.w[i]:=a.w[i] mod 10;
end;
if a.w[a.len+1]<>0 then inc(a.len);
if a.len>490 then a.len:=490;
exit(a);
end;
function cmpname(s1,s2:string):integer;//按字典顺序比较姓名
var
i,k:integer;
begin
if length(s1)<length(s2)
then k:=length(s1)
else k:=length(s2);
for i:= 1 to k do
begin
if s1[i]<s2[i] then exit(1);
if s1[i]>s2[i] then exit(-1);
end;
if length(s1)<length(s2) then exit(1);
if length(s1)>length(s2) then exit(-1);
exit(0);
end;
function cmpscore(s1,s2:muldat):integer;//比较2个高精度数据的大小
var
i:integer;
begin
if s1.len>s2.len then exit(1);
if s1.len<s2.len then exit(-1);
for i:= s1.len downto 1 do
begin
if s1.w[i]>s2.w[i] then exit(1);
if s1.w[i]<s2.w[i] then exit(-1);
end;
exit(0);
end;
function cmp(a,b:data):integer; //比较2个猪王的大小
begin
if cmpscore(a.score,b.score)=1 then exit(1);
if cmpscore(a.score,b.score)=-1 then exit(-1);
if cmpname(upcase(a.name),upcase(b.name))=1 then exit(1);
if cmpname(upcase(a.name),upcase(b.name))=-1 then exit(-1);
exit(0);
end;
procedure qsort(m,n:longint);//按猪王排序
var
i,j:longint;
k,t:data;
begin
i:=m; j:=n;
k:=a[(i+j) div 2] ;
repeat
while cmp(a[i],k)=1 do inc(i);
while cmp(a[j],k)=-1 do dec(j);
if i<=j
then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);
end;
until i>j;
if m<j then qsort(m,j);
if i<n then qsort(i,n);
end;
begin
readin;
all.len:=1; all.w[1]:=0;
for i:= 1 to n do
all:=add(all,a[i].score);
qsort(1,n);
for i:= 1 to n do
writeln(a[i].name);
for i:=490 downto 1 do
write(all.w[i]);
readln;
end.
你看看我的程序
#include<iostream>
#include<string.h>
using namespace std;
int n;
string name[5001];
string a[5001];
int num[5001],tot;
void type()
{
int i;
for (i=1;i<=n;i++)
cout<<name[i]<<endl;
for (i=490;i>=1;i--)
cout<<num[i];
}
void jia( string x)
{
int i,j=1;
if ( tot< x.size() )
tot=x.size();
for ( i=x.size()-1 ;i>=0 ;i-- )
{
num[j]=num[j]+x[i]-’0’;
j++;
}
for ( i=1;i<=tot;i++ )
if ( num[i]>9 )
{
num[i+1]=num[i+1]+num[i]/10;
num[i]=num[i]%10;
}
while ( num[tot]>9 && tot<=490 )
{
num[tot+1]=num[tot+1]+num[tot]/10;
num[tot]=num[tot]%10;
tot++;
}
tot=500;
}
void init()
{
int i,max=0;
cin>>n;
for (i=1;i<=n;i++)
{
cin>>name[i]>>a[i];
jia( a[i] );
if (max<a[i].size())
max=a[i].size();
}
}
void sort(int x,int y)
{
int i,j;
string temp;
if ( x<y )
{
i=x-1;
for (j=x;j<=y;j++)
{
if ( ( a[j].size()==a[y].size() && a[j]>a[y] )|| a[j].size()>a[y].size() )
{
i++;
temp=a[i];a[i]=a[j];a[j]=temp;
temp=name[i];name[i]=name[j];name[j]=temp;
}
else
{
if ( a[j]==a[y] )
{
if ( name[j]<name[y] )
{
i++;
temp=a[i];a[i]=a[j];a[j]=temp;
temp=name[i];name[i]=name[j];name[j]=temp;
}
}
}
}
temp=a[i+1];a[i+1]=a[y];a[y]=temp;
temp=name[i+1];name[i+1]=name[y];name[y]=temp;
sort(x,i);
sort(i+2,y);
}
}
main()
{
init();
sort(1,n);
type();
}