⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4176622_ac_1532ms_7824k.java

📁 北大大牛代码 1240道题的原代码 超级权威
💻 JAVA
字号:
import java.util.*;

public class Main {

	private Scanner in;
	private int m, n, k;
	private Column[] column;
	private Record[] record;

	public static void main(String[] args) {
		new Main().run();
	}

	class Column {
		String name;
		String type;

		public Column() {
			name = in.next();
			type = in.next();
		}
	}

	class Record {
		String[] item;

		public Record() {
			item = new String[m];
			for (int i = 0; i < m; i++) {
				item[i] = in.next();
			}
		}

		public boolean equalsItem(int id, String str) {
			if (column[id].type.equals("STR")) {
				return str.substring(1, str.length() - 1).equals(item[id]);
			}
			return Integer.parseInt(str) == Integer.parseInt(item[id]);
		}

		public boolean biggerItem(int id, String str) {
			return Integer.parseInt(item[id]) > Integer.parseInt(str);
		}

		public boolean smallerItem(int id, String str) {
			return Integer.parseInt(item[id]) < Integer.parseInt(str);
		}
	}

	private void run() {
		in = new Scanner(System.in);
		m = in.nextInt();
		n = in.nextInt();
		k = in.nextInt();
		column = new Column[m];
		for (int i = 0; i < m; i++) {
			column[i] = new Column();
		}
		record = new Record[n];
		for (int i = 0; i < n; i++) {
			record[i] = new Record();
		}
		for (int i = 0; i < k; i++) {
			in.next();
			String col = in.next();
			in.next();
			String condition = in.next();
			int index;
			index = condition.indexOf("=");
			ArrayList <Integer> al = new ArrayList <Integer>();
			if (index != -1) {
				int id = -1;
				for (int j = 0; j < m; j++) {
					if (column[j].name.equals(condition.substring(0, index))) {
						id = j;
						break;
					}
				}
				for (int j = 0; j < n; j++) {
					if (record[j].equalsItem(id, condition.substring(index + 1))) {
						al.add(j);
					}
				}
			}
			index = condition.indexOf(">");
			if (index != -1) {
				int id = -1;
				for (int j = 0; j < m; j++) {
					if (column[j].name.equals(condition.substring(0, index))) {
						id = j;
						break;
					}
				}
				for (int j = 0; j < n; j++) {
					if (record[j].biggerItem(id, condition.substring(index + 1))) {
						al.add(j);
					}
				}
			}
			index = condition.indexOf("<");
			if (index != -1) {
				int id = -1;
				for (int j = 0; j < m; j++) {
					if (column[j].name.equals(condition.substring(0, index))) {
						id = j;
						break;
					}
				}
				for (int j = 0; j < n; j++) {
					if (record[j].smallerItem(id, condition.substring(index + 1))) {
						al.add(j);
					}
				}
			}
			output(al, col);
		}
	}

	private void output(ArrayList <Integer> al, String col) {
		String[] col_str = col.split(",");
		int tot = 0;
		int[] len = new int[col_str.length];
		int[] ID = new int[col_str.length];
		for (int i = 0; i < col_str.length; i++) {
			int id = -1;
			for (int j = 0; j < m; j++) {
				if (column[j].name.equals(col_str[i])) {
					id = j;
					break;
				}
			}
			ID[i] = id;
			int max = col_str[i].length();
			for (int j = 0; j < al.size(); j++) {
				if (record[j].item[id].length() > max) {
					max = record[j].item[id].length();
				}
			}
			tot += (len[i] = max);
		}
		out("+");
		for (int i = 0; i < col_str.length; i++) {
			out("--");
		}
		for (int i = 1; i < col_str.length; i++) {
			out("-");
		}
		for (int i = 0; i < tot; i++) {
			out("-");
		}
		out("+\n");
		for (int i = 0; i < col_str.length; i++) {
			out("| ");
			for (int j = 0; j <= len[i] - column[ID[i]].name.length(); j++) {
				if (j == (len[i] - column[ID[i]].name.length()) / 2) {
					out(column[ID[i]].name);
				} else {
					out(" ");
				}
			}
			out(" ");
		}
		out("|\n");
		out("|");
		for (int i = 0; i < col_str.length; i++) {
			for (int j = 0; j < len[i] + 2; j++) {
				out("-");
			}
			out("|");
		}
		out("\n");

		for (int i = 0; i < al.size(); i++) {
			for (int j = 0; j < col_str.length; j++) {
				out("| ");
				for (int k = 0; k <= len[j] - record[al.get(i)].item[ID[j]].length(); k++) {
					if (k == (len[j] - record[al.get(i)].item[ID[j]].length()) / 2) {
						out(record[al.get(i)].item[ID[j]]);
					} else {
						out(" ");
					}
				}
				out(" ");
			}
			out("|\n");
		}

		out("+");
		for (int i = 0; i < col_str.length; i++) {
			out("--");
		}
		for (int i = 0; i < tot; i++) {
			out("-");
		}
		for (int i = 1; i < col_str.length; i++) {
			out("-");
		}
		out("+\n\n");
	}

	private void out(String str) {
		System.out.print(str);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -