importjava.io.*;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException,InvalidInputException{BufferedReaderstdin=newBufferedReader(newInputStreamReader(Syste...
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException, InvalidInputException {
BufferedReader stdin =
new BufferedReader(
new InputStreamReader(System.in));
String line = null;
String[] input = null;
while (true) {
line = stdin.readLine();
int width = Integer.parseInt(line);
if (width == 0) break;
int[][] matrix = new int[3][width];
RlePair pair = new RlePair(0, 0);
int value = 0;
int times = 0;
int index = 0;
int delta = 0;
int diffValue = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < width; j++) {
matrix[i][j] = -1; // -1 is null
}
}
while (true) {
line = stdin.readLine();
input = line.split("\\s");
if (input.length != 2) {
throw new InvalidInputException();
}
value = Integer.parseInt(input[0]);
times = Integer.parseInt(input[1]);
if (value == 0 && times == 0) break;
int currRow = 0;
for (int n = 0; n < times; n++) {
currRow = (index + n) / width + 1 - delta;
if (currRow == 3) {
for (int i = 0; i < width; i++) {
diffValue = max(width, matrix, i);
if (diffValue == pair.value) {
pair.times++;
} else {
if (pair.times != 0) System.out.println(pair.toString());
pair = new RlePair(diffValue, 1);
}
}
delta++;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < width; j++) {
matrix[i][j] = matrix[i + 1][j];
}
}
currRow = (index + n) / width + 1 - delta;
if (n / width > 2 && (times - n) / width > 1) {
int d = (times - n) / width - 1;
pair.times += d * width;
n += d * width;
delta += d;
}
}
matrix[currRow][(index + n) % width] = value;
}
index += times;
}
for (int i = 0; i < width; i++) {
diffValue = max(width, matrix, i);
if (diffValue == pair.value) {
pair.times++;
} else {
if (pair.times != 0) System.out.println(pair.toString());
pair = new RlePair(diffValue, 1);
}
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < width; j++) {
matrix[i][j] = matrix[i + 1][j];
}
}
for (int j = 0; j < width; j++) {
matrix[2][j] = -1;
}
for (int i = 0; i < width; i++) {
if (matrix[1][i] == -1) break;
diffValue = max(width, matrix, i);
if (diffValue == pair.value) {
pair.times++;
} else {
if (pair.times != 0) System.out.println(pair.toString());
pair = new RlePair(diffValue, 1);
}
}
System.out.println(pair.toString());
System.out.println("0 0");
}
}
}
由于代码超过了提问的限制,所以max()方法的定义没写,假定max()没有问题吧,谢谢大家了
class RlePair {
int value;
int times;
public RlePair(int value, int times) {
this.value = value;
this.times = times;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.value + " " + this.times;
}
}
展开