高贵的蕾米莉亚大小姐每天需要饮用定量 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"); } } }