profile
Размещено 5 лет назад по предмету Информатика от AppleGhost

Переписать программу с Java на Pascal, СРОЧНО, 50 баллов
import java.util.*;
import java.io.*;

public class sol_ik {

private final int UNIT = 1000;
private final int DISCOUNT_PER_UNIT = 500;
private final double MAX_DISCOUNT = 0.2;

private double getTotalCost(long firstCost, long secondCost,
long fullUnits) {
long couponSum = fullUnits * DISCOUNT_PER_UNIT;
double secondCostWithDiscount = secondCost
- Math.min(MAX_DISCOUNT * secondCost, couponSum);
return firstCost + secondCostWithDiscount;
}

long[] solveKnapsack(long[] weights, long totalWeight) {
int maxUnits = (int) (totalWeight / UNIT + 1);
long[] old = new long[maxUnits + 1];
Arrays.fill(old, totalWeight);
old[0] = 0;
long[] cur = new long[maxUnits + 1];
int n = weights.length;
for (int pos = 0; pos < n; pos++) {
Arrays.fill(cur, totalWeight);
for (int units = 0; units <= maxUnits; units++) {
cur[units] = Math.min(cur[units], old[units]);
int add = (int) weights[pos] / UNIT;
if (units - add >= 0) {
cur[units] = Math.min(cur[units],
old[units - add] + weights[pos]);
}
}
System.arraycopy(cur, 0, old, 0, cur.length);
}
return old;
}

public double getSolution(long[] costs) {
int n = costs.length;
long totalCost = 0;
for (int i = 0; i < n; i++) {
totalCost += costs[i];
}
long[] minForUnits = solveKnapsack(costs, totalCost);
double res = totalCost;
long maxUnits = totalCost / UNIT + 1;
for (int units = 0; units <= maxUnits; units++) {
double cur = minForUnits[units];
res = Math.min(res,
getTotalCost(minForUnits[units],
totalCost - minForUnits[units],
units));
}
return res;
}

public void solve(Scanner in, PrintWriter out) {
int n = in.nextInt();
long[] costs = new long[n];
for (int i = 0; i < n; i++) {
costs[i] = in.nextInt();
}
out.printf("%.2f%n", getSolution(costs));
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
new sol_ik().solve(in, out);
out.flush();
}
}

  1. Ответ на вопрос
    Ответ на вопрос дан AylaZeynalova
    скачай нужный файл.Потом перекинь на папку.
    1. Ответ на вопрос
      Ответ на вопрос дан AppleGhost
      Вы можете это переписать ведь?
    2. Ответ на вопрос
      Ответ на вопрос дан Аккаунт удален
      Могу, но только если: 1) пойму структуру входных данных 2) получу эти данные для тестирования, чтобы пропустить их на Java , а затем на Паскале и сравнить результаты.
    3. Ответ на вопрос
      Ответ на вопрос дан AppleGhost
      Я могу вам скинуть пару тестов и ответы для них
    4. Ответ на вопрос
      Ответ на вопрос дан Аккаунт удален
      Либо, что проще, надо постановку задачи, послать эту программу куда подальше и написать с нуля в Паскале.
    5. Ответ на вопрос
      Ответ на вопрос дан AppleGhost
      Вы напишите?
  2. Ответ на вопрос
    Ответ на вопрос дан Аккаунт удален
    // PascalABC.NET 3.3, сборка 1607 от 31.12.2017
    // Внимание! Если программа не работает, обновите версию!

    const
      cunit=1000;
      DISCOUNT_PER_UNIT=500;
      MAX_DISCOUNT=0.2;

    function getTotalCost(firstCost,secondCost,fullUnits:real):real;
    begin
      var couponSum:=fullUnits*DISCOUNT_PER_UNIT;
        var secondCostWithDiscount:=
            secondCost-Min(MAX_DISCOUNT*secondCost,couponSum);
        Result:=firstCost+secondCostWithDiscount
    end;

    function solveKnapsack(weights:array of integer; totalWeight:integer):
        array of integer;
    begin
        var maxUnits:=Trunc(totalWeight/cunit+1);
        var old:=ArrFill(maxUnits+1,totalWeight);
        old[0]:=0;
        var cur:=new integer[maxUnits+1];
        var n:=weights.Length;
        for var pos:=0 to n-1 do begin
            cur.Fill(t->totalWeight);
            for var units:=0 to maxUnits do begin
                cur[units]:=Min(cur[units],old[units]);
                var add:=Trunc(weights[pos]/cunit);
                if units-add >= 0 then
                    cur[units]:=Min(cur[units],old[units-add]+weights[pos])
                end;
                cur.CopyTo(old,0);
            end;
        Result:=old;    
    end;

    function getSolution(costs:array of integer):real;
    begin
      var n:=costs.Length;
        var totalCost:=0;
        for var i:=0 to n-1 do totalCost+=costs[i];
        var minForUnits:=solveKnapsack(costs,totalCost);
        Result:=totalCost;
        var maxUnits:=Trunc(totalCost/cunit+1);
        for var units:=0 to maxUnits do begin
          var cur:real:=minForUnits[units];
            Result:=Min(Result,getTotalCost(minForUnits[units],totalCost-cur,units))
          end
    end;

    begin
      Writeln(getSolution(ReadArrInteger(ReadInteger)):0:2)
    end.

    Пример
    15
    1131 2764 1249 3885 4971 2526 1506 1919 520 3094 2183 2503 277 2293 4477
    30415.40
    1. Ответ на вопрос
      Ответ на вопрос дан Аккаунт удален
      Выполнено фактически прямое портирование текста программы за исключением "экзотики" языка Java, поэтому программа получилась короче.
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 6 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.