zoukankan      html  css  js  c++  java
  • SSL JudgeOnline 2322——运输

    Description

    现在已知N件商品,和搬运它们其中每一件的费用。现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品。然后这2件商品只算一件商品的费用。但是这个商品的搬运费用是将选出的2个商品的费用之和除以k的运算结果。如此反复。直到只收一件商品的钱。这个就是商店要付的费用。掌柜的想尽可能的少付钱,以便将更多的钱捐给希望工程。所以请你帮他计算一下最少只用付多少钱。

    Input

    n,kw1,w2…..wn(每一件物品搬运费)

    Output

    一个数 最少付多少钱

    Sample Input

    5 2
    1 2 3 4 5
    Sample Output

    1
    Hint

    n和k<=10000


    这是一题贪心

    每次将最大的两个数取出来,将他们的和除以K,就是这两件商品的费用之和。然后将这个数插入到数组里,使数组有序(从大到小)。再重复以上循环,直到只剩一个数,就是答案。


    代码如下:

    var  n,m,i,j:longint;
         a:array[0..10000]of int64;
    
    procedure qsort(l,r:longint);
    var  i,j,mid:longint;
    begin
      if i>=j then exit;
      i:=l; j:=r; mid:=a[(j+i) div 2];
      repeat
        while a[i]<mid do inc(i);
        while a[j]>mid do dec(j);
        if i<=j then
          begin
            a[0]:=a[i];
            a[i]:=a[j];
            a[j]:=a[0];
            inc(i);
            dec(j);
          end;
      until i>j;
      qsort(l,j);
      qsort(i,r);
    end;
    
    begin
      read(n,m);
      for i:=1 to n do read(a[i]);
      qsort(1,n);
      for i:=n-1 downto 1 do
        begin
          a[i]:=(a[i]+a[i+1])div m;
          for j:=i-1 downto 1 do
            if a[j]>a[i] then
              begin
                a[0]:=a[i];
                a[i]:=a[j];
                a[j]:=a[0];
              end;
        end;
      write(a[1]);
    end.
  • 相关阅读:
    MySQL 中无法 insert 文件路径 中的 backward slash的解决方法
    生成颜色代码的 Java程序
    公积金贷款不受影响 组合贷款有特殊
    ADOMD.NET Client Object架构
    心情•笔记20061231
    微软所谓的"无人工介入的自动的机器翻译系统"
    游戏中的微软
    商业智能的个人理解
    无日
    从电影死亡笔记看商业智能在治安领域的应用
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412470.html
Copyright © 2011-2022 走看看