java实现 洛谷 P1056 排座椅
2024-09-26 22:58:12
import java.util.Arrays;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
private static Scanner cin;
private static int m;
private static int n;
private static int k;
private static int l;
private static int d;
public static void main(String args[]) throws Exception {
cin = new Scanner(System.in);
String t = cin.nextLine();
String[] v = t.split(" ");
m = Integer.valueOf(v[0]);
n = Integer.valueOf(v[1]);
k = Integer.valueOf(v[2]);
l = Integer.valueOf(v[3]);
d = Integer.valueOf(v[4]);
int x,y,p,q;
TreeMap<Spliter,Integer> tmK = new TreeMap<>();
TreeMap<Spliter,Integer> tmL = new TreeMap<>();
for(int i=0;i<d;i++) {
t = cin.nextLine();
v = t.split(" ");
x = Integer.valueOf(v[0]);
y = Integer.valueOf(v[1]);
p = Integer.valueOf(v[2]);
q = Integer.valueOf(v[3]);
//the same column, x is the same, spliter is L
if(x == p) {
Spliter s = new Spliter((y+q)/2);
if(tmL.containsKey(s)) {
int count = tmL.get(s);
tmL.replace(s, new Integer(count+1));
}else {
tmL.put(s, 1);
}
}
//the same row, y is the same ,spliter is K
else if(y == q) {
Spliter s = new Spliter((x+p)/2);
if(tmK.containsKey(s)) {
int count = tmK.get(s);
tmK.put(s, new Integer(count+1));
}else {
tmK.put(s, 1);
}
}
}
SpliterCount[] scK = new SpliterCount[tmK.size()];
SpliterCount[] scL = new SpliterCount[tmL.size()];
Entry<Spliter,Integer> e;
int[] karray = new int[k];
int[] larray = new int[l];
for(int i=0,size=tmK.size();i<size;i++) {
e = tmK.pollFirstEntry();
SpliterCount sct = new SpliterCount(e.getKey(),e.getValue());
scK[i] = sct;
}
Arrays.sort(scK);
for(int i=0;i<k;i++) {
karray[i] = scK[scK.length-i-1].getSpliter().getSpliterLine();
}
Arrays.sort(karray);
for(int i=0,size=tmL.size();i<size;i++) {
e = tmL.pollFirstEntry();
SpliterCount sct = new SpliterCount(e.getKey(),e.getValue());
scL[i] = sct;
}
Arrays.sort(scL);
for(int i=0;i<l;i++) {
larray[i] = scL[scL.length-i-1].getSpliter().getSpliterLine();
}
Arrays.sort(larray);
String ts = Arrays.toString(karray);
System.out.println(ts.substring(1, ts.length()-1).replace(",", ""));
ts = Arrays.toString(larray);
System.out.println(ts.substring(1, ts.length()-1).replace(",", ""));
}
}
class Spliter implements Comparable{
Integer spliterLine;
public Spliter(Integer aspliterLine) {
spliterLine = aspliterLine;
}
public Integer getSpliterLine() {
return spliterLine;
}
public int compareTo(Object arg0) {
Spliter s = (Spliter)arg0;
return spliterLine.compareTo(s.getSpliterLine());
}
public String toString() {
return String.format("spliterLine:%d,", spliterLine);
}
}
class SpliterCount implements Comparable{
Spliter spliter;
Integer count;
public SpliterCount(Spliter s, Integer c) {
spliter = s;
count = c;
}
public int compareTo(Object arg0) {
SpliterCount sc = (SpliterCount)arg0;
Spliter s2 = sc.getSpliter();
Integer c2 = sc.getCount();
if(spliter == s2 && count == c2) {
return 0;
}else if(count == c2) {
return - spliter.compareTo(s2);
}else {
return count.compareTo(c2);
}
}
public Spliter getSpliter() {
return spliter;
}
public Integer getCount() {
return count;
}
public String toString() {
return String.format("spliter:%s count=%d", spliter.toString(),count);
}
}
最新文章
- The easy way to implement a Red-Black tree
- Python学习路程day16
- S5PV210的内存分配研究分析
- 冲刺阶段 day2
- HTML5 CANVAS 高级
- Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)
- Java中的ThreadLocal深入理解
- loj6045 「雅礼集训 2017 Day8」价
- 使用Zabbix监控mysql的主从同步
- 【centos】/usr/bin与/usr/local/bin的区别
- fpm定制化RPM包之nginx rpm包的制作
- AYUI第12个作品-英雄联盟-魔法少女的星光水晶2.0-WPF版本
- Pandas数据的去重,替换和离散化,异常值的检测
- 从简单类型到复杂类型的参数传递用例,以及传递简单string类型的解决办法
- How to become a successful bug bounty hunter
- java对象的六大原则
- 配置静态IP
- Java之异常机制(1) - 高效处理异常
- Python--进阶处理8
- 超过两行显示省略号 -webkit-line-clamp、-webkit-box-orient vue打包后不起作用
热门文章
- [hdu5033]单调队列
- beego中Controller的GetControllerAndAction方法
- hdoj 1874 dijkstra
- 黑马程序员_毕向东_Java基础视频教程——算术运算符小点(随笔)
- 基于Vue搭建自己的组件库(1)
- ketchup 注册中心consul使用
- vue中mixins的使用方法和注意点(详2)(异步请求的情况)
- promise对象里resolve和reject状态讲解及Promise.all()的使用
- Angular和Ionic的路由跳转
- Element-UI自定义主题