java排座位程序_java实现 洛谷 P1056 排座椅

badb49391ccd2855c0aacc75e709156c.png

6eb592fab2ed1e09a8cfdefea0b49304.png

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 tmK = new TreeMap<>();

TreeMap tmL = new TreeMap<>();

for(int i=0;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 e;

int[] karray = new int[k];

int[] larray = new int[l];

for(int i=0,size=tmK.size();i

e = tmK.pollFirstEntry();

SpliterCount sct = new SpliterCount(e.getKey(),e.getValue());

scK[i] = sct;

}

Arrays.sort(scK);

for(int i=0;i

karray[i] = scK[scK.length-i-1].getSpliter().getSpliterLine();

}

Arrays.sort(karray);

for(int i=0,size=tmL.size();i

e = tmL.pollFirstEntry();

SpliterCount sct = new SpliterCount(e.getKey(),e.getValue());

scL[i] = sct;

}

Arrays.sort(scL);

for(int i=0;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);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值