Advertisement
Guest User

Untitled

a guest
Oct 5th, 2015
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.93 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.         Queue<EmployeeGroup> employees = new ArrayDeque<>();
  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(days, numberHired, salary));
  25.             if (days % 365 ==0) {
  26.                 for (EmployeeGroup employeeGroup : employees) {
  27.                     employeeGroup.salary = employeeGroup
  28.                                           .originalSalary
  29.                                           .multiply(new BigDecimal("1.006")
  30.                                           .multiply(new BigDecimal(days / 365)));
  31.                 }
  32.             }
  33.             if (days % 30 ==0) {
  34.                 BigDecimal salariesToGive = BigDecimal.ZERO;
  35.                 for (EmployeeGroup employeeGroup : employees) {
  36.                     int daysWorking = days + 1 - employeeGroup.dayHired;
  37.                     BigDecimal dailySalary = employeeGroup.salary.divide(new BigDecimal(30), 9, BigDecimal.ROUND_UP).setScale(7, RoundingMode.DOWN);
  38.                     if (daysWorking < 30) {
  39.                         salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * daysWorking)));
  40.                     }
  41.                     else {
  42.                         salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * 30)));
  43.                     }
  44.                 }
  45.                 initialCapital = initialCapital.subtract(salariesToGive);
  46.             }
  47.             for (EmployeeGroup employeeGroup : employees) {
  48.  
  49.                 if (numberFired <= employeeGroup.members) {
  50.                     employeeGroup.members -= numberFired;
  51.                     break;
  52.                 } else {
  53.                     numberFired -= employeeGroup.members;
  54.                     employeeGroup.members = 0;
  55.                 }
  56.             }
  57.             for (int i = 3; i < commands.length; i++) {
  58.                 String[] additional = commands[i].split(":");
  59.                 BigDecimal number = new BigDecimal(additional[1]);
  60.                 switch (additional[0]){
  61.                     case "Previous years deficit" :
  62.                     case "Machines":
  63.                     case "Taxes": initialCapital = initialCapital.subtract(number);break;
  64.                     case "Product development":
  65.                     case "Unconditional funding": initialCapital = initialCapital.add(number);break;
  66.                 }
  67.             }
  68.             if (initialCapital.compareTo(BigDecimal.ZERO) < 0) {
  69.                 System.out.printf("BANKRUPTCY: %s", initialCapital.negate().setScale(4, RoundingMode.DOWN));
  70.                 return;
  71.             }
  72.             input = scanner.nextLine();
  73.         }
  74.         System.out.printf("%s %s", employees.stream().mapToLong(i -> i.members).sum(), initialCapital.setScale(4, RoundingMode.DOWN));
  75.  
  76.     }
  77.  
  78.     static class EmployeeGroup{
  79.         public int dayHired;
  80.         public BigDecimal salary;
  81.         public long members;
  82.         public BigDecimal originalSalary;
  83.  
  84.         public EmployeeGroup(int dayHired, long members, BigDecimal salary) {
  85.             this.dayHired = dayHired;
  86.             this.members = members;
  87.             this.salary = salary;
  88.             this.originalSalary = salary;
  89.         }
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement