题目:
丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~
k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。
两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过
p 。 他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过 p 元的咖啡店小聚。 `` 输入描述: 共n+1 行。
第一行三个整数 n ,k ,p ,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值; 接下来的 n
行,第 i+1 行两个整数,之间用一个空格隔开,分别表示 i 号客栈的装饰色调和 i 号客栈的咖啡店的最低消费。
输出描述:
一个整数,表示可选的住宿方案的总数。
示例
示例1 输入
5 2 3
0 5
1 3
0 2
1 4
1 5
输出 3
package org.dt.practice;
// 请关闭中文输入法,用英文的字母和标点符号。
// 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
// 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
// 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
// 模版代码提供基本的输入输出框架,可按个人代码习惯修改
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str_0 = scan.nextLine();
String[] line_list_0 = str_0.trim().split(" ");
ArrayList<Integer> arr_temp = new ArrayList<>();
for (int i = 0; i < line_list_0.length; i++) {
arr_temp.add(Integer.parseInt(line_list_0[i]));
}
int n = arr_temp.get(0);
int k = arr_temp.get(1);
int p = arr_temp.get(2);
ArrayList<ArrayList<Integer>> vector = new ArrayList<>();
for (int i = 0; i < n; i++) {
String str_3 = scan.nextLine();
String[] line_list_3 = str_3.trim().split(" ");
ArrayList<Integer> temp_3 = new ArrayList<>();
for (int j = 0; j < line_list_3.length; j++) {
temp_3.add(Integer.parseInt(line_list_3[j]));
}
vector.add(temp_3);
}
scan.close();
int result = solution(n, k, p, vector);
System.out.println(result);
}
/**
* @param n 客栈数量
* @param k 颜色种类
* @param p 最高预算
* @param vector List<int,int> 颜色 : 最低消费
* @return
*/
public static int solution(int n, int k, int p, ArrayList<ArrayList<Integer>> vector) {
int result = 0;
// TODO: 请在此编写代码
//遍历所有住店的可能,
List<List<Integer>> lists = new ArrayList<>();
for (int i = 0; i < vector.size() - 1; i++) {
// 获取颜色
Integer color = vector.get(i).get(0);
for (int i1 = i + 1; i1 < vector.size(); i1++) {
Integer color1 = vector.get(i1).get(0);
//如果颜色相同,储存两个数字的位置
if (color == color1) {
List<Integer> list = new ArrayList<>();
list.add(i);
list.add(i1);
lists.add(list);
}
}
}
// [[0, 2], [1, 3], [1, 4], [3, 4]]
//计算所有可能中,符合条件的值
for (int i = 0; i < lists.size(); i++) {
Integer startPoint = lists.get(i).get(0);
Integer endPoint = lists.get(i).get(1);
for (int i1 = startPoint; i1 <= endPoint; i1++) {
// 客栈最低消费
Integer minimumConsumption = vector.get(i1).get(1);
if(p > minimumConsumption)
result++;
}
}
System.out.println(lists);
return result;
}
}