猪王争霸
Description
工商部門查獲了有N個人正在販賣注水豬肉,現在要你對這N個人的注水豬肉的數量從大到小的排序,并且算出這N個人的注水豬肉總和(單位為…..斤)…我們姑且稱這些販賣者為”豬王”吧..
Input
輸入的第一行是一個1到1000的整數N,表示總共有N位豬王參加了爭霸賽。以下依次給出每位豬王的描述,一位豬王的描述占據兩行,第一行為一個僅由小寫字母組成的長度不超過13的字符串,代表這個豬王的名字,第二行一個整數(非負數,<10^2000),代表這個豬王的注水豬肉總斤數。注意,這個整數的首位沒有不必要的0。所有豬王販賣的注水豬肉數量的總長度不會超過2000。
Output
依次輸出按照注水豬肉多少從大到小排好序的各位販賣者的名字,每個名字占據單獨的一行。不能有任何多余的字符。若幾個名字的注水豬肉數相同,則按照名字的字典順序先后排列。(名字長度<=13且均為大寫字母),在N+1行輸出所有豬王販賣注水豬肉的數量的總和(輸出最后490位)
Sample Input
5
ABC
123
ABCD
1234
ABCDE
12345
ABCDEF
123456
ABCDEFG
1234567
Sample Output
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001371725
分析
排序+高精
程序:
const maxn=2050;var n,i,j,l1,l2:longint; a,b:array[0..maxn]of ansistring; c:array[0..maxn]of longint;procedure jia(k:longint); var i,j:longint; beginfor i:=length(b[k]) downto 1 doinc(c[maxn-length(b[k])+i],ord(b[k][i])-48);for i:=maxn downto maxn-500 dobeginc[i-1]:=c[i-1]+c[i] div 10;c[i]:=c[i] mod 10;end; end;beginreadln(n);for i:=1 to n dobeginreadln(a[i]);readln(b[i]);end;for i:=1 to n dojia(i);for i:=1 to n-1 dofor j:=i+1 to n dobeginl1:=length(b[i]);l2:=length(b[j]);if (l1<l2)or((l1=l2)and(b[i]<b[j]))or((l1=l2)and(b[i]=b[j])and(a[i]>a[j])) thenbeginb[0]:=b[i];b[i]:=b[j];b[j]:=b[0];a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];end;end;for i:=1 to n dowriteln(a[i]);for i:=maxn-490+1 to maxn dowrite(c[i]); end.轉載于:https://www.cnblogs.com/YYC-0304/p/9500058.html
總結