Java BigInteger+排序(感覺很神奇)
阿新 • • 發佈:2018-12-24
本人在搞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> 來記錄,這樣差不多就解決了。