Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.sun.jmx.remote.internal.ArrayQueue;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.*;
- /**
- * Created by SET on 5.10.2015 г..
- */
- public class DragonAccounting {
- public static void main(String[] args) {
- Locale.setDefault(Locale.ROOT);
- Scanner scanner = new Scanner(System.in);
- BigDecimal initialCapital = new BigDecimal(scanner.nextLine());
- List<EmployeeGroup> employees = new ArrayList<>();
- int days = 0;
- String input = scanner.nextLine();
- while (!input.equals("END")) {
- String[] commands = input.split(";");
- days++;
- long numberHired = Long.parseLong(commands[0]);
- long numberFired = Long.parseLong(commands[1]);
- BigDecimal salary = new BigDecimal(commands[2]);
- employees.add(new EmployeeGroup(numberHired, salary));
- if (days >= 365) {
- for (EmployeeGroup employeeGroup : employees) {
- employeeGroup.daysWorking++;
- if (employeeGroup.daysWorking % 365 == 0) {
- employeeGroup.salary = employeeGroup
- .salary
- .multiply(new BigDecimal("1.006"));
- }
- }
- }
- if (days % 30 == 0) {
- BigDecimal salariesToGive = BigDecimal.ZERO;
- for (EmployeeGroup employeeGroup : employees) {
- BigDecimal dailySalary = employeeGroup.salary.divide(new BigDecimal(30), 9, BigDecimal.ROUND_UP).setScale(7, RoundingMode.DOWN);
- if (employeeGroup.daysWorking < 30) {
- salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * employeeGroup.daysWorking)));
- } else {
- salariesToGive = salariesToGive.add(dailySalary.multiply(new BigDecimal(employeeGroup.members * 30)));
- }
- }
- initialCapital = initialCapital.subtract(salariesToGive);
- }
- for (EmployeeGroup employeeGroup : employees) {
- if (numberFired <= employeeGroup.members) {
- employeeGroup.members -= numberFired;
- break;
- } else {
- numberFired -= employeeGroup.members;
- employeeGroup.members = 0;
- }
- }
- for (int i = 3; i < commands.length; i++) {
- String[] additional = commands[i].split(":");
- BigDecimal number = new BigDecimal(additional[1]);
- switch (additional[0]) {
- case "Previous years deficit":
- case "Machines":
- case "Taxes":
- initialCapital = initialCapital.subtract(number);
- break;
- case "Product development":
- case "Unconditional funding":
- initialCapital = initialCapital.add(number);
- break;
- }
- }
- if (initialCapital.compareTo(BigDecimal.ZERO) < 0) {
- System.out.printf("BANKRUPTCY: %s", initialCapital.negate().setScale(4, RoundingMode.DOWN));
- return;
- }
- input = scanner.nextLine();
- }
- System.out.printf("%s %s", employees.stream().mapToLong(i -> i.members).sum(), initialCapital.setScale(4, RoundingMode.DOWN));
- }
- static class EmployeeGroup {
- public int daysWorking;
- public BigDecimal salary;
- public long members;
- public EmployeeGroup(long members, BigDecimal salary) {
- this.daysWorking = 0;
- this.members = members;
- this.salary = salary;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement