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.
    
  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500058.html
Copyright © 2011-2022 走看看