高贵的蕾米莉亚大小姐每天需要饮用定量 B 型血的红茶以保持威严,并且要分两杯在不同时段饮用。
女仆长十六夜咲夜每天可以制作很多杯不同剂量 B 型血的红茶供蕾米莉亚大小姐饮用。
某日,你和天才妖精琪露诺偷偷潜入红魔馆被咲夜抓住,要求在今日份的红茶中挑出所有满足大小姐要求的茶杯,否则……
每个样例有三行输入,第一行输入表示茶杯个数,第二行输入表示每份茶杯里的 B 型血剂量,第三行表示大小姐今天的定量
对每一个样例,输出所有可能的搭配方案,如果有多种方案,请按每个方案的第一杯 B 型血剂量的大小升序排列。
如果无法找到任何一种满足大小姐的方案,输出"NO"(不包括引号)并换行。
7 2 4 6 1 3 5 7 7
1 6 2 5 3 4
茶杯个数不超过100000,保证茶杯里的B型血剂量两两不同。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int count = in.nextInt();
int[] nums = new int[count];
for(int i = 0; i < count; i++){
nums[i] = in.nextInt();
}
int target = in.nextInt();
Arrays.sort(nums);
//左右指针
int left = 0;
int right = nums.length - 1;
StringBuilder res = new StringBuilder();
while(left < right){
int cur = nums[left] + nums[right];
if(cur == target){
res.append(nums[left] + " " + nums[right] + "\n");
left++;
right--;
}
else if(cur < target){
left++;
}
else if(cur > target){
right--;
}
}
//结果为空
if(res.length() == 0){
System.out.println("NO");
}
else{
System.out.println(res);
}
}
}
} 常规解法,排序+双指针。(就是95%后的测试用例什么情况,说不通过,但是我对比实际输出又显示一致。。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
/**
* @Author: coderjjp
* @Date: 2020-05-08 9:39
* @Description: ん...红茶?
* @version: 1.0
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(br.readLine());
String[] s = br.readLine().split(" ");
int x[] = new int[n];
for (int i = 0; i < n; i++)
x[i] = Integer.valueOf(s[i]);
int t = Integer.valueOf(br.readLine());
Arrays.sort(x);
int count = 0;
int l = 0, r = n-1;
while (l < r){
if (x[l]+x[r] == t){
count++;
System.out.println(x[l]+" "+x[r]);
l++;
r--;
}
else if (x[l]+x[r] > t)
r--;
else
l++;
}
if (count == 0)
System.out.println("NO");
}
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] s = br.readLine().split(" ");
int need = Integer.parseInt(br.readLine());
int[] blood = new int[n];
for (int i = 0; i < blood.length; i++) {
blood[i] = Integer.parseInt(s[i]);
}
Arrays.sort(blood);
int left = 0;
int right = n - 1;
boolean flag = false;
while (left < right) {
if (blood[left] + blood[right] == need) {
flag = true;
System.out.println(blood[left] + " " + blood[right]);
left++;
} else if (blood[left] + blood[right] > need) {
right--;
} else {
left++;
}
}
if (!flag) {
System.out.println("NO");
}
}
}