Advertisement
Guest User

Untitled

a guest
Oct 5th, 2015
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.90 KB | None | 0 0
  1. import com.sun.jmx.remote.internal.ArrayQueue;
  2.  
  3. import java.math.BigDecimal;
  4. import java.math.RoundingMode;
  5. import java.util.*;
  6.  
  7. /**
  8.  * Created by SET on 5.10.2015 г..
  9.  */
  10. public class DragonAccounting {
  11.     public static void main(String[] args) {
  12.         Locale.setDefault(Locale.ROOT);
  13.         Scanner scanner = new Scanner(System.in);
  14.         BigDecimal initialCapital = new BigDecimal(scanner.nextLine());
  15.         List<EmployeeGroup> employees = new ArrayList<>();
  16.         int days = 0;
  17.         String input = scanner.nextLine();
  18.         while (!input.equals("END")) {
  19.             String[] commands = input.split(";");
  20.             days++;
  21.             long numberHired = Long.parseLong(commands[0]);
  22.             long numberFired = Long.parseLong(commands[1]);
  23.             BigDecimal salary = new BigDecimal(commands[2]);
  24.             employees.add(new EmployeeGroup(numberHired, salary));
  25.             if (days >= 365) {
  26.                 for (EmployeeGroup employeeGroup : employees) {
  27.                     employeeGroup.daysWorking++;
  28.                     if (employeeGroup.daysWorking % 365 == 0) {
  29.  
  30.                         employeeGroup.salary = employeeGroup
  31.                                 .salary
  32.                                 .multiply(new BigDecimal("1.006"));
  33.                     }
  34.                 }
  35.             }
  36.             if (days % 30 == 0) {
  37.                 BigDecimal salariesToGive = BigDecimal.ZERO;
  38.                 for (EmployeeGroup employeeGroup : employees) {
  39.  
  40.                     BigDecimal dailySalary = employeeGroup.salary.divide(new BigDecimal(30), 9, BigDecimal.ROUND_UP).setScale(7, RoundingMode.DOWN);
  41.                     if (employeeGroup.daysWorking < 30) {
  42.                         salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * employeeGroup.daysWorking)));
  43.                     } else {
  44.                         salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * 30)));
  45.                     }
  46.                 }
  47.                 initialCapital = initialCapital.subtract(salariesToGive);
  48.             }
  49.             for (EmployeeGroup employeeGroup : employees) {
  50.  
  51.                 if (numberFired <= employeeGroup.members) {
  52.                     employeeGroup.members -= numberFired;
  53.                     break;
  54.                 } else {
  55.                     numberFired -= employeeGroup.members;
  56.                     employeeGroup.members = 0;
  57.                 }
  58.             }
  59.             for (int i = 3; i < commands.length; i++) {
  60.                 String[] additional = commands[i].split(":");
  61.                 BigDecimal number = new BigDecimal(additional[1]);
  62.                 switch (additional[0]) {
  63.                     case "Previous years deficit":
  64.                     case "Machines":
  65.                     case "Taxes":
  66.                         initialCapital = initialCapital.subtract(number);
  67.                         break;
  68.                     case "Product development":
  69.                     case "Unconditional funding":
  70.                         initialCapital = initialCapital.add(number);
  71.                         break;
  72.                 }
  73.             }
  74.             if (initialCapital.compareTo(BigDecimal.ZERO) < 0) {
  75.                 System.out.printf("BANKRUPTCY: %s", initialCapital.negate().setScale(4, RoundingMode.DOWN));
  76.                 return;
  77.             }
  78.             input = scanner.nextLine();
  79.         }
  80.         System.out.printf("%s %s", employees.stream().mapToLong(i -> i.members).sum(), initialCapital.setScale(4, RoundingMode.DOWN));
  81.  
  82.     }
  83.  
  84.     static class EmployeeGroup {
  85.         public int daysWorking;
  86.         public BigDecimal salary;
  87.         public long members;
  88.  
  89.         public EmployeeGroup(long members, BigDecimal salary) {
  90.             this.daysWorking = 0;
  91.             this.members = members;
  92.             this.salary = salary;
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement