只有80分有一个测试点超时了怎么回事
查看原帖
只有80分有一个测试点超时了怎么回事
999144
Serendipity_Gzy楼主2023/8/17 10:20

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();
		int T=sc.nextInt();
		double []rate=new double[N];
		double []m=new double[N];//第 i 堆金币的总重量
		double []v=new double[N];//第 i 堆总价值
		for(int i=0;i<N;i++) {
			m[i]=sc.nextInt();
			v[i]=sc.nextInt();
			rate[i]=v[i]/m[i];
		}
		for(int i=0;i<N-1;i++) {//简单排序,从大到小
			int k=i;
			for(int j=i+1;j<N;j++) {
				if(rate[k]<rate[j]) {
					k=j;
				}
			}
			if(k!=i) {
				double temp1=rate[i];
				rate[i]=rate[k];
				rate[k]=temp1;
				double temp2=m[i];
				m[i]=m[k];
				m[k]=temp2;
				double temp3=v[i];
				v[i]=v[k];
				v[k]=temp3;
			}
		}
		double cost=0;
		for(int i=0;T>0;i++) {
			if(m[i]<=T) {
			cost+=v[i];
			T-=m[i];
			}
			else {
				cost+=T*(v[i]/m[i]);
				break;
			}
		}
		System.out.println(String.format("%.2f",cost));
	}

}

2023/8/17 10:20
加载中...