

流程图

求解代码
java
static class Minister{
long a;
long b;
Minister(long a,long b){
this.a = a;
this.b = b;
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine().trim());
String[] str = br.readLine().trim().split("\\s+");
long a0 = Long.parseLong(str[0]);
Minister[] ministers = new Minister[n];
for(int i=0;i<n;i++){
String[] ministerStr = br.readLine().trim().split("\\s+");
long a = Long.parseLong(ministerStr[0]);
long b = Long.parseLong(ministerStr[1]);
ministers[i]=new Minister(a, b);
}
Arrays.sort(ministers,(x,y)->Long.compare(x.a*x.b, y.a*y.b));
// 计算最大金币数
long maxCoin = 0;
long productA = a0; // 前序左手数的乘积(初始为国王的a0)
for (Minister m : ministers) {
// 当前大臣的金币数 = 前序乘积 / 当前b
long coin = productA / m.b;
// 更新最大金币数
if (coin > maxCoin) {
maxCoin = coin;
}
// 前序乘积 *= 当前大臣的a
productA *= m.a;
}
out.println(maxCoin);
out.flush();
out.close();
br.close();
}