第一題
P 為 給 定 的 二 維 平 面 整 數(shù) 點(diǎn) 集 。 定 義 P 中 某 點(diǎn) 如 果 × 滿 足 P 中 任 意 點(diǎn) 都 不 在 × 的 右 上 方 區(qū) 域 內(nèi) ( 橫 縱 坐標(biāo) 都 大 于 × ) 蔫敲, 則 稱 其 為 “ 最 大 的 ” 啤挎。 求 出 所 有 “ 最 大 的 ” 點(diǎn) 的 集 合 驻谆。 〈 所 有 點(diǎn) 的 橫 坐 標(biāo) 和 縱 坐 標(biāo) 都 不 重 復(fù) . 坐 標(biāo) 軸 范 圍 在 [ 0 , 1 e9 ] 內(nèi) ) 如 下 圖 實(shí) 心 點(diǎn) 為 滿 足 條 件 的 點(diǎn) 的 集 合 庆聘。
請(qǐng) 實(shí) 現(xiàn) 代 碼 找 到 集 合 P 中 的 所 有 ” 最 大 “ 點(diǎn) 的 集 合 并 輸 出 胜臊。 第 一 行 輸 入 點(diǎn) 集 的 個(gè) 數(shù) N , 接 下 來 N 行 伙判, 每 行 兩 個(gè) 數(shù) 字 代 表 點(diǎn) 的 x 軸 和 Y 軸 象对。
輸 出
輸 出 “ 最 大 的 ” 點(diǎn) 集 合 , 按 照 x 軸 從 小 到 大 的 方 式 輸 出 宴抚, 每 行 兩 個(gè) 數(shù) 字 分 別 代 表 點(diǎn) 的 x 軸 和 Y 軸 勒魔。
樣 例 輸 入
5
1 2
5 3
4 6
7 6
9 0
題目解答:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long[][] arr = new long[n][2];
for(int i = 0; i < n;i++){
arr[i][0] = in.nextLong();
arr[i][1] = in.nextLong();
}
System.out.println(solve(n,arr));
in.close();
}
public static int solve(int n, long[][] arr) {
int count = 0;
int i,j;
for(i = 0; i < n; i++){
boolean flag = true;
for(j = 0; j < n ; j++){
if(arr[j][0] > arr[i][0] && arr[j][1] > arr[i][1]){
flag = false;
break;
}
else continue;
}
if(flag) count++;
}
return count;
}
}
第二題
給 定 一 個(gè) 數(shù) 組 序 列 甫煞, 需 要 求 選 出 一 個(gè) 區(qū) 間 , 使 得 該 區(qū) 間 是 所 有 區(qū) 間 中 經(jīng) 過 如 下 計(jì) 算 的 值 最 大 的 一 個(gè) : 區(qū) 間 中 的 最 小 數(shù) * 區(qū) 間 所 有 數(shù) 的 和 最 后 程 序 輸 出 經(jīng) 過 計(jì) 算 后 的 最 大 值 即 可 冠绢, 不 需 要 輸 出 具 體 的 區(qū)
間 抚吠。 如 給 定 序 列 [ 6 2 1 ] 則 根 據(jù) 上 述 公 式 , 可 得 到 所 有 可 以 選 定 各 個(gè) 區(qū) 間 的 計(jì) 算 值
從 上 述 計(jì) 算 可 見 選 定 區(qū) 間 [ 6 ] 弟胀, 計(jì) 算 值 為 36 楷力, 則 程 序 輸 出 為 36 。
區(qū) 間 內(nèi) 的 所 有 數(shù) 字 都 在 [ 0 孵户, 100 ] 的 范 圍 內(nèi)萧朝。
輸 入
第 一 行 輸 入 數(shù) 組 序 列 個(gè) 數(shù) , 第 二 行 輸 入 數(shù) 組 序 列 夏哭。
輸 出
輸 出 數(shù) 組 經(jīng) 過 計(jì) 算 后 的 最 大 值 剪勿。
樣 例 輸 入
3
6 2 1
樣 例 輸 出
36
Hint
對(duì) 于 50 % 的 數(shù) 據(jù) , 1 < = n < = 10000 .
對(duì) 于 1 % 的 數(shù) 據(jù) 方庭, 1 < = n < = 500000 .
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n;i++){
arr[i] = in.nextInt();
}
System.out.println(solve(n,arr));
in.close();
}
public static long solve(int n, int[] arr) {
int i,j;
long max = Integer.MIN_VALUE;
for(i = 1; i <= n; i++){ //取i個(gè)數(shù)據(jù)組成一個(gè)區(qū)間
for(j = 0; j <= n-i ; j++){ //區(qū)間范圍從數(shù)組第j個(gè)索引位置開始
int min = Integer.MAX_VALUE;
int sum = 0;
for(int m = j; m < j+i; m++){ //依次獲取從第j個(gè)索引位置的數(shù)據(jù)直到第j+i-1個(gè)位置的數(shù)據(jù)
min = min < arr[m] ? min:arr[m];
sum +=arr[m];
}
max = max > min*sum ? max : min*sum;
}
}
return max;
}
}