zoukankan      html  css  js  c++  java
  • 猪王争霸

    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;
    begin
         for i:=length(b[k]) downto 1 do
         inc(c[maxn-length(b[k])+i],ord(b[k][i])-48);
         for i:=maxn downto maxn-500 do
         begin
             c[i-1]:=c[i-1]+c[i] div 10;
             c[i]:=c[i] mod 10;
         end;
    end;
    
    
    begin
        readln(n);
        for i:=1 to n do
        begin
            readln(a[i]);
            readln(b[i]);
        end;
        for i:=1 to n do
        jia(i);
        for i:=1 to n-1 do
        for j:=i+1 to n do
        begin
            l1:=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])) then
            begin
                b[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 do
        writeln(a[i]);
        for i:=maxn-490+1 to maxn do
        write(c[i]);
    end.
    
  • 相关阅读:
    [CF803D] Magazine Ad(二分,贪心)
    [CF803A] Maximal Binary Matrix(构造)
    [CF803B] Distances to Zero(模拟)
    [HDOJ5869] Different GCD Subarray Query(RMQ,树状数组,离线)
    [SPOJ DQUERY] D-query(树状数组,离线)
    [CF193B] Xor(暴力,剪枝,异或)
    [swust 1741] 最长递增子序列问题(DP,最大流)
    [HDOJ3998] Sequence(DP,最大流)
    [swust1745] 餐巾计划问题(费用流)
    [51nod 1208] Stars in Your Window(线段树,扫描线)
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500058.html
Copyright © 2011-2022 走看看