首页 > 试题广场 >

[NOIP2011]选择客栈

[编程题][NOIP2011]选择客栈
  • 热度指数:166 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
丽江河边有n家很有特色的客栈,客栈按照其位置顺序从1到n编号。每家客栈都按照某一种色调进行装饰(总共k种,用整数 0~k-1表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。
两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过p。
他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过p元的咖啡店小聚。


输入描述:
第一行三个整数 n,k,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;
接下来的n行,第i+1行两个整数,之间用一个空格隔开,分别表示i号客栈的装饰色调和i号客栈的咖啡店的最低消费。


输出描述:
输出只有一行,一个整数,表示可选的住宿方案的总数。
示例1

输入

5 2 3
0 5
1 3
0 2
1 4
1 5

输出

3

说明


2人要住同样色调的客栈,所有可选的住宿方案包括:住客栈①③,②④,②⑤,④⑤,但是若选择住4、5号客栈的话,4、5号客栈之间的咖啡店的最低消费是4,而两人能承受的最低消费是3元,所以不满足要求。因此只有前3种方案可选。

备注:
对于30%的数据,有 n ≤ 100;
对于50%的数据,有 n ≤ 1,000;
对于100%的数据,有 2 ≤ n ≤ 200,000,0 < k ≤ 50,0 ≤ p ≤ 100,0 ≤ 最低消费 ≤ 100。
头像 又在摸鱼的大熊猫很勤奋努力
发表于 2020-09-03 20:14:21
选择客栈 这个题,因为他没有说两个人的顺序对答案有影响,所以我们可以考虑固定一个人为右端点,记录最靠近这个右端点的人的可以去的咖啡店 如果说这个点大于这种颜色的客栈,那么就可以在之前的颜色中乱选,就是可以把之前有的所有这个颜色的客栈记为贡献 好像就口胡完了 #include <cstdio&g 展开全文
头像 DeNeRATe
发表于 2020-09-07 16:33:38
分析 由于我们需要求出符合要求的,但感觉比较繁琐所以我们考虑求补集,即不符合要求的发现,不符合要求,当且仅当:两个客栈位于两个的客栈之间所以,我们类似一个滑动窗口向右滑动,记录各种颜色的个数当遇到满足要求的客栈时,立马统计答案即可最后用总方案数不符合要求的方案数即可 代码 //P1311 #incl 展开全文
头像 sunny_forever
发表于 2021-08-12 22:21:22
思路 枚举右端点 i 当 fee[i] <= p 时,对其有贡献的左端点是:i 左侧所有与 i 同色的点 当 fee[i] > p 时,对其有贡献的左端点分为两种: (1) i 左侧,所有与 i 同色的,fee[j] <= p 的 j 点 显然: 位置 j < 位置 i 展开全文
头像 sunrise__sunrise
发表于 2020-09-06 18:12:58
题目描述 给出一维线段长度n,客栈装修颜色k,咖啡店最高的花费p。再给出n个点的装修颜色和咖啡店花费,问你在装修颜色相同的两家店,左右闭区间的情况下,区间咖啡店最小值小于等于p的集合有几个? Solution 因为咖啡店是顺序给出的,我们直接对着先录取颜色和咖啡店花费,如果当前点的花费小于等于p,那 展开全文
头像 horz
发表于 2020-09-03 18:59:46
分析 对于每种颜色单独考虑,从左往右扫,记录最后出现的小于 p 的位置,对于贡献,我们枚举右端点,当记录的位置大于前一次出现的的位置时,更新可用左端点的数量。 #include <bits/stdc++.h> using namespace std; #define mem(a,b) m 展开全文
头像 blowhail
发表于 2020-09-07 18:01:11
枚举右边的客栈,每次都先找距离当前客栈最近的蛮族最低消费小于p的客栈 (可以用一个数组来记录最近的小于p的客栈, 如果第i个咖啡小于p,那么vis[i]=i,否则 vis[i]=vis[i-1]然后再计算最近的客栈左边的颜色和当前客栈相同的颜色的数量,加上即可 (颜色数量可以用一个二维数 展开全文
头像 sunsetcolors
发表于 2020-09-04 15:29:35
选择客栈 题目地址: https://ac.nowcoder.com/acm/problem/16594 基本思路: 我们考虑倒着枚举,对于每个客栈,我们只要考虑它后面第一个最低消费不超过元的咖啡店的位置,这个咖啡店之后的每个相同色调的客栈很明显都能和当前这个客栈被一起选择,所以我们求个后缀 展开全文
头像 熠丶
发表于 2020-09-08 00:23:28
时间复杂度: 思路: sum即统计pospos之前的颜色相同的旅店的个数pre是上一个颜色相同的旅店的位置cnt是该颜色旅店的总数 我们可以维护一个pos(在i个旅店之前的最近的满足最低消费小于p的旅店) 那么我们统计一下在pos之前的颜色相同的旅店的个数加进答案 #include <bits 展开全文
头像 ryougi_
发表于 2020-09-04 20:39:46
https://ac.nowcoder.com/acm/problem/16594两个人,每个客栈有颜色和价格,问两个人住一样的颜色并且中间有价格<=有的钱的客栈问有多少种住法;枚举左边的人的位置,统计右边的人可以在的位置的数量 #include <bits/stdc++.h> u 展开全文
头像 savage
发表于 2019-08-31 17:01:28
题目描述 丽江河边有n家很有特色的客栈,客栈按照其位置顺序从1到n编号。每家客栈都按照某一种色调进行装饰(总共k种,用整数 0~k-1表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。 展开全文