1. 程式人生 > >【洛谷OJ】【JAVA】P1056 排座椅

【洛谷OJ】【JAVA】P1056 排座椅

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);
	}
}

相關推薦

OJJAVAP1018 乘積最大

import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner cin; private static char[] values;

OJJAVAP1056 座椅

import java.util.Arrays; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; public class Main { private s

OJJAVAP1914 小書童——密碼

import java.util.Scanner; public class Main { private static Scanner cin; public static void main(String args[]) throws Exception {

OJJAVA P1540 機器翻譯

import java.util.LinkedList; import java.util.Scanner; public class Main { private static Scanner cin; public static void main(Stri

OJ P3803 模板多項式乘法(FFT)

題目思路:FFT模板題 AC程式碼: // luogu-judger-enable-o2 #include <stdio.h> #include <string.h> #include <iostream> #include <

OJP1055 ISBN號碼

import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main{     private static Scanner

OJP2141 珠心算測驗

import java.util.LinkedList; import java.util.Scanner; public class Main {     private static Scanner cin;     public static void main(

OJ P3368 模板樹狀陣列 2

題目思路:區間更新,單點查詢模板題,樹狀陣列做法 AC程式碼: #include<cstdio> #include<cmath> #include<cstring> #include<string> #include&l

P2858·動態規劃[USACO06FEB]奶牛零食Treats for the Cows

greate single nes 得到 form images include 規劃 ive 題面 題目描述 FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money

mNOIP模擬賽Day1T1 斐波那契

lld -s ace can using code 我們 namespace log 題目傳送門:https://www.luogu.org/problemnew/show/P3938 這題出得特別吼啊~~ 通過打表或者大膽猜想斐波那契數列的一些性質,我們不難發現對於一

九月月賽T1簽到題(bsgs)(快速乘)

code 是我 好的 取模 lin pri sca ast for 說好的簽到題呢qwq。。。。怎麽我簽到題都不會啊qwq 之後看了bsgs才發現貌似不是那麽那麽難fake!!什麽東西。。。 先貼上部分分做法(也就是枚舉1的個數,然後每一步都進行取模(這和最後取模結果一樣,

P3038 [USACO11DEC]牧草種植樹鏈剖分邊權修改與查詢

【連結】 https://www.luogu.org/problemnew/show/P3038 【題意】 給出一棵n個節點的樹,有m個操作,操作為將一條路徑上的邊權加一或詢問某條邊的權值。 【思路】 樹鏈剖分的裸題。 但是這個題是在邊上進行操作,我們考慮把邊上的操作轉移到點

九月月賽加賽 kls與flag

主要涉及到map的用法,看到題目時不要思維定式,靈活轉化即可A掉。 code: #include<iostream> #include<map> using namesp

11月月賽T3P4996咕咕咕(組合數)

遲到的題解 昨天亂翻的時候感覺這道題挺有意思的 一眼看過去狀態壓縮亂搜 轉移方程大概是 設f[i]表示從0轉移到i的遺憾值之和 f[i]=sigma(f[j])+val[i]*dis[i] dis[i]=sigma(dis[j]) 其中j是i的子集,dis[i]表示從0轉移到i的方案數之和 妙啊有70分了 /

P5015 標題統計(java

題目描述 凱凱剛寫了一篇美妙的作文,請問這篇作文的標題中有多少個字元? 注意:標題中可能包含大、小寫英文字母、數字字元、空格和換行符。統計標題字 符數時,空格和換行符不計算在內。 輸入輸出格式 輸入格式:   輸入檔案只有一行,一個字串 ss。  

P1343地震逃生

優化 fine puts bits sta sin int() empty print 一道傻吊的網絡流題,wori我寫的讀入優化怎麽老T? 遠離讀入優化報平安? #include<bits/stdc++.h> #define N 4005 #define i

堆的模板題P3378

urn 我們 syn code space mes con ret pre 題目描述 如題,初始小根堆為空,我們需要支持以下3種操作: 操作1: 1 x 表示將x插入到堆中 操作2: 2 輸出該小根堆內的最小數 操作3: 3 刪除該小根堆內的最小數 輸入輸出格式 輸入格式:

P1408 互質數列

可能 ans 簡化 tro 出了 its mem ive oid 這題其實比較naive…… 問題是我更naive…… 這題偉大的楊隊長提出了一個 的dp做法…… 我的做法就很naive了。 首先我們發現,如果我們對兩個相鄰的數進行一次操作,這個操作產生的影響最多波及的a[

P1240 諸侯安置

pan max 分享 printf logs 由於 image ++ png 題目描述 很久以前,有一個強大的帝國,它的國土成正方形狀,如圖所示。 這個國家有若幹諸侯。由於這些諸侯都曾立下赫赫戰功,國王準備給他們每人一塊封地(正方形中的一格)。但是,這些諸侯又非常好戰,當兩

原創 LUOGU P3373 模板線段樹2

取模 file 需要 code ace highlight dig org zh-cn P3373 【模板】線段樹 2 題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1.將某區間每一個數加上x 2.將某區間每一個數乘上x 3.求出