1. 程式人生 > >Java BigInteger+排序(感覺很神奇)

Java BigInteger+排序(感覺很神奇)

本人在搞ACM

今天遇到了一個題,資料有點大,要開 unsigned long long,但是我沒想到,就想去用Java的BigInteger,但是輸出要求按順序,當時還在想BigInteger怎麼排序啊,是不是要自己存到數組裡,自己寫個排序啊,那多麻煩,寫不好就超時。

然後後來結合資料結構一想,有自動排序的資料結構啊,Set裡面有個TreeSet,也就是紅黑樹,突然就靈機一動,最後終於AC。

其實程式碼超級簡單,下面說一下怎麼排序吧。

其實就是插入到TreeSet裡面,到時輸出就行了

import java.math.*;
import java.util.*;
public class Main {

	public static void main(String[] args) 
	{
		Set<BigInteger> s = new TreeSet<BigInteger>();
		Scanner in = new Scanner(System.in);
		BigInteger item;
		while( T--!= 0 )
		{
			item = in.nextBigInteger();	//輸入大整數
			s.add(item);				//加到 TreeSet裡面
		}
		Iterator it = s.iterator();		
		while( it.hasNext() )		//輸出
			System.out.println(it.next());
	}

}

怎麼樣,是不是超級簡單,而且都不用自己過載比較函式。

但是很遺憾,Java庫裡面沒有multiset,不能允許重複,所以上面的方法還是有侷限性的,但是,我們稍微動一下腦筋,還是可以用的。

如果需要重複輸出,我們就記錄重複了多少次嘛,用map<BigInteger,int> 來記錄,這樣差不多就解決了。