Advertisement
Guest User

02DragonAccounting -fixed

a guest
Oct 28th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.14 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. import java.util.LinkedList;
  4. import java.util.Queue;
  5. import java.util.Scanner;
  6.  
  7. public class DragonAccounting {
  8.     public static void main(String[] args) {
  9.         Scanner scanner= new Scanner(System.in);
  10.         Queue<BigDecimal[]> employees = new LinkedList<>();
  11.         BigDecimal budget  = scanner.nextBigDecimal();
  12.         scanner.nextLine();
  13.         BigDecimal dayCounter = BigDecimal.ZERO;
  14.         boolean hadBankupted = false;
  15.         String[] inputLine;
  16.  
  17.         while(!(inputLine = scanner.nextLine().split("\\;"))[0].equals("END")){
  18.             dayCounter = dayCounter.add(BigDecimal.ONE);
  19.  
  20.             Long hiredEmployees = Long.parseLong(inputLine[0]);
  21.             Long firedEmployees = Long.parseLong(inputLine[1]);
  22.             BigDecimal hiredEmployeesSalary = new BigDecimal(inputLine[2]);
  23.  
  24.             BigDecimal[] employeeObj = new BigDecimal[]{new BigDecimal(1)
  25.                     ,dayCounter,hiredEmployeesSalary,new BigDecimal(hiredEmployees)};
  26.             employees.add(employeeObj);
  27.  
  28.             if(dayCounter.compareTo(new BigDecimal(30))==0){
  29.                 dayCounter=BigDecimal.ZERO;
  30.                 BigDecimal employeeSalary;
  31.                 for(BigDecimal[] employee : employees) {
  32.  
  33.  
  34.                     if (employee[0].compareTo(new BigDecimal(365))>=0) {
  35.                         employee[2] = employee[2].multiply(new BigDecimal(1.006));
  36.                         employee[0] = employee[0].subtract(new BigDecimal(365));
  37.                     }
  38.  
  39.                     employeeSalary = (employee[2].divide(new BigDecimal(30), 9, RoundingMode.UP).setScale(7,RoundingMode.DOWN));
  40.                     employeeSalary = employeeSalary.multiply(new BigDecimal(31).subtract(employee[1]));
  41.                     employee[0] = employee[0].add(BigDecimal.ONE);
  42.                     employee[1] = BigDecimal.ONE;
  43.  
  44.                     employeeSalary = employeeSalary.multiply(employee[3]);
  45.                     budget = budget.subtract(employeeSalary);
  46.                 }
  47.             }else{
  48.                 for(BigDecimal[] employee : employees){
  49.                     employee[0] = employee[0].add(BigDecimal.ONE);
  50.                 }
  51.             }
  52.             for (int i = 0; i < firedEmployees; i++) {
  53.                 if(employees.peek()[3].equals(BigDecimal.ZERO)){
  54.                     employees.remove();
  55.                 }
  56.                 employees.peek()[3] = employees.peek()[3].subtract(BigDecimal.ONE);
  57.                 if(employees.peek()[3].equals(BigDecimal.ZERO)){
  58.                     employees.remove();
  59.                 }
  60.             }
  61.             for (int i = 3; i < inputLine.length; i++) {
  62.                 String[] dailyActivitiesString = inputLine[i].split(":");
  63.                 String dailyActivity = dailyActivitiesString[0];
  64.                 BigDecimal dailyActivityValue = new BigDecimal(dailyActivitiesString[1]);
  65.                 if(dailyActivity.equals("Previous years deficit")){
  66.                     budget = budget.subtract(dailyActivityValue);
  67.                 }else if(dailyActivity.equals("Machines")){
  68.                     budget = budget.subtract(dailyActivityValue);
  69.                 }else if(dailyActivity.equals("Taxes")){
  70.                     budget = budget.subtract(dailyActivityValue);
  71.                 }else if(dailyActivity.equals("Product development")){
  72.                     budget = budget.add(dailyActivityValue);
  73.                 }else if(dailyActivity.equals("Unconditional funding")){
  74.                     budget = budget.add(dailyActivityValue);
  75.                 }
  76.             }
  77.             if(budget.compareTo(BigDecimal.ZERO)<=0){
  78.                 hadBankupted = true;
  79.                 break;
  80.             }
  81.         }
  82.         String result = budget.abs().setScale(4,RoundingMode.DOWN).toPlainString();
  83.  
  84.         if(hadBankupted){
  85.             System.out.printf("BANKRUPTCY: %s",result);
  86.         }else{
  87.             Long employeesCount = 0L;
  88.             for(BigDecimal[] empl : employees){
  89.                 employeesCount += empl[3].longValueExact();
  90.             }
  91.             System.out.printf("%d %s", employeesCount,result);
  92.         }
  93.  
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement