import java.util.Scanner;
/**
* @author Jaca777
* Created 2015-09-28 at 17
*/
public class sia {
private static class Mowing {
private long limit;
private long day;
public Mowing(long day, long limit) {
this.limit = limit;
this.day = day;
}
}
private static class Input {
private int area;
private int types;
private int[] growthRate;
private Mowing[] mowings;
public Input(int area, int types, int[] growthRate, Mowing[] mowings) {
this.area = area;
this.types = types;
this.growthRate = growthRate;
this.mowings = mowings;
}
}
private static class Output {
private long[] weights;
private Output(long[] weights) {
this.weights = weights;
}
public long[] getWeights() {
return weights;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
for (long weight : weights) {
builder.append(weight);
builder.append('\n');
}
return builder.toString();
}
}
public static Output solve(Input input) {
Mowing initialMowing = new Mowing(0, 0);
Mowing[] mowings = input.mowings;
long[] lastState = new long[input.area];
long[] weights = new long[input.mowings.length];
for (int i = 0; i < mowings.length; i++) {
Mowing lastMowing = (i > 0) ? mowings[i - 1] : initialMowing;
Mowing mowing = mowings[i];
long delta = mowing.day - lastMowing.day;
for (int j = 0; j < input.area; j++) {
long currentState = lastState[j] + input.growthRate[j] * delta;
long weight = Math.max(currentState - mowing.limit, 0);
weights[i] += weight;
lastState[j] = currentState - weight;
}
}
return new Output(weights);
}
public static Input readSystemInput() {
Scanner scanner = new Scanner(System.in);
int area = scanner.nextInt();
int types = area;
int cutsAmount = scanner.nextInt();
int[] growthRate = new int[types];
for (int i = 0; i < growthRate.length; i++) {
growthRate[i] = scanner.nextInt();
}
Mowing[] mowings = new Mowing[cutsAmount];
for (int i = 0; i < mowings.length; i++) {
mowings[i] = new Mowing(scanner.nextInt(), scanner.nextInt());
}
scanner.close();
return new Input(area, types, growthRate, mowings);
}
public static void main(String... args) {
Input input = readSystemInput();
System.out.println(solve(input));
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import java.util.Scanner; /** * @author Jaca777 * Created 2015-09-28 at 17 */ public class sia { private static class Mowing { private long limit; private long day; public Mowing(long day, long limit) { this.limit = limit; this.day = day; } } private static class Input { private int area; private int types; private int[] growthRate; private Mowing[] mowings; public Input(int area, int types, int[] growthRate, Mowing[] mowings) { this.area = area; this.types = types; this.growthRate = growthRate; this.mowings = mowings; } } private static class Output { private long[] weights; private Output(long[] weights) { this.weights = weights; } public long[] getWeights() { return weights; } @Override public String toString() { StringBuilder builder = new StringBuilder(); for (long weight : weights) { builder.append(weight); builder.append('\n'); } return builder.toString(); } } public static Output solve(Input input) { Mowing initialMowing = new Mowing(0, 0); Mowing[] mowings = input.mowings; long[] lastState = new long[input.area]; long[] weights = new long[input.mowings.length]; for (int i = 0; i < mowings.length; i++) { Mowing lastMowing = (i > 0) ? mowings[i - 1] : initialMowing; Mowing mowing = mowings[i]; long delta = mowing.day - lastMowing.day; for (int j = 0; j < input.area; j++) { long currentState = lastState[j] + input.growthRate[j] * delta; long weight = Math.max(currentState - mowing.limit, 0); weights[i] += weight; lastState[j] = currentState - weight; } } return new Output(weights); } public static Input readSystemInput() { Scanner scanner = new Scanner(System.in); int area = scanner.nextInt(); int types = area; int cutsAmount = scanner.nextInt(); int[] growthRate = new int[types]; for (int i = 0; i < growthRate.length; i++) { growthRate[i] = scanner.nextInt(); } Mowing[] mowings = new Mowing[cutsAmount]; for (int i = 0; i < mowings.length; i++) { mowings[i] = new Mowing(scanner.nextInt(), scanner.nextInt()); } scanner.close(); return new Input(area, types, growthRate, mowings); } public static void main(String... args) { Input input = readSystemInput(); System.out.println(solve(input)); } } |
English