现在的位置: 首页 > 综合 > 正文

HDOJ 4957 Poor Mitsui(小数高精度)

2019年02月12日 ⁄ 综合 ⁄ 共 1266字 ⁄ 字号 评论关闭

公式还是很好推的,关键是这题竟然是高精度,,,手写小数高精度还是算了,用JAVA吧0 0。。

import java.io.*;
import java.math.*;
import java.util.*;

class Bucket {
	BigDecimal a, b, k;
	Bucket() {}
	Bucket(BigDecimal _a, BigDecimal _b, BigDecimal _k) {
		a = _a;
		b = _b;
		k = _k;
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner cin = new Scanner(new BufferedInputStream(System.in));
		int t, n, v, maxa;
		int[] a = new int[50];
		int[] b = new int[50];
		t = cin.nextInt();
		while(t > 0) {
			t--;
			maxa = 0;
			n = cin.nextInt();
			v = cin.nextInt();
			for(int i = 0; i < n; i++)
				a[i] = cin.nextInt();
			for(int i = 0; i < n; i++) {
				b[i] = cin.nextInt();
				if(b[i] != 0 && maxa < a[i])
					maxa = a[i];
			}
			if(maxa >= v)
				System.out.println(-1);
			else {
				List<Bucket> list= new ArrayList<Bucket>();
				BigDecimal ans = BigDecimal.ZERO;
				BigDecimal nv = BigDecimal.valueOf(v);
				for(int i = 0; i < n; i++) {
					Bucket tmp = new Bucket(BigDecimal.valueOf(a[i]), BigDecimal.valueOf(b[i]), 
							BigDecimal.valueOf(b[i]).divide(BigDecimal.valueOf(a[i]), 200, BigDecimal.ROUND_HALF_UP));
					list.add(tmp);
				}
				Collections.sort(list, new Comparator<Bucket>() {
					public int compare(Bucket arg0, Bucket arg1) {
						return arg0.k.compareTo(arg1.k);
					}
				});
				for(int i = 0; i < n; i++) {
					Bucket tmp = list.get(i);
					if(tmp.b.compareTo(BigDecimal.ZERO) != 0) {
						ans = ans.add((tmp.b.add(ans.multiply(tmp.a))).divide(nv.subtract(tmp.a), 200, 
								BigDecimal.ROUND_HALF_UP));
					}
				}
				ans = ans.setScale(0, BigDecimal.ROUND_HALF_UP);
				System.out.println(ans);
			}
		}
		cin.close();
	}

}

抱歉!评论已关闭.