题目描述

丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。

两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过 p 。

他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过 p元的咖啡店小聚。

输入输出格式

输入格式:

输入文件hotel.in,共n+1 行。

第一行三个整数n ,k ,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;

接下来的n 行,第 i+1 行两个整数,之间用一个空格隔开,分别表示 i 号客栈的装饰色调和i 号客栈的咖啡店的最低消费。

输出格式:

输出文件名为hotel.out 。

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

输入输出样例

输入样例#1:

5 2 3
0 5
1 3
0 2
1 4
1 5
输出样例#1:

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。

  • 本题没有什么算法或数据结构,只要是线性的并且是正确的就可以。(反正我是乱搞的)
  • 本题乱搞重要策略:预处理。
  • 首先预处理出每一个区间是否存在可供选择的咖啡店,即小于等于最低消费的客栈,可以用前缀和来搞。
  • 接着预处理出每一个客栈的和它颜色相同的前驱客栈,即它之前的与它距离最近并且颜色相同的客栈。
  • 还要预处理出从左端开始到某个房子时该房子的颜色出现的次数。
  • 然后从左扫到右,指针为两人住的靠后的客栈,每次扫到一个客栈后,找到它的前驱客栈(之前已经预处理好),判断这两个点之间有没有符合要求的咖啡店(之前已经预处理好),如果有符合的咖啡店的话就把答案加上前驱客栈之前的该颜色的出现次数(预处理3)(因为之前的客栈一定是符合要求的),如果没有符合的客栈就继续找前驱的前驱,直到没有前驱。
  • 三个预处理的时间复杂度为O(n),扫描的复杂度比O(n)稍大一些,总体来说时间复杂度为O(n),期望得分100分。
  • 本题正解递推。(但是我并不会)
 var
n,i,j,k,minn,ans,p :longint;
col,w :array[..] of longint;
s,a :array[..] of longint;
pre,sum :array[..] of longint;
now :array[..] of longint;
begin
read(n,k,minn);
for i:= to n do
begin
read(col[i],w[i]);
if (w[i]<=minn) then a[i]:=;
s[i]:=s[i-]+a[i];
end;
//for i:= to n do write(s[i],' ');
for i:= to n do
begin
if (now[col[i]]=) then
begin
now[col[i]]:=i;
pre[i]:=;
sum[i]:=;
continue;
end;
pre[i]:=now[col[i]];
sum[i]:=sum[pre[i]]+;
now[col[i]]:=i;
end;
for i:= to n do
begin
if pre[i]= then continue;
p:=pre[i];
while (p<>) do
begin
if (s[i]-s[p-]>) then
begin
inc(ans,sum[p]);
break;
end;
p:=pre[p];
end;
end;
writeln(ans);
end.

最新文章

  1. mysql与sqlserver之间的关系转换
  2. Spring overview
  3. oop、configparser、xml模块
  4. [Js]Ajax
  5. @@Error使用简单小结
  6. c#加密 可逆与不可逆MD5 加密
  7. window.open 使用方法总结
  8. Axis2 转让Webservice 介面
  9. hudson配置教程
  10. ROS学习笔记
  11. php sprintf用法
  12. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
  13. weblogic找不到数据源
  14. git常用命令--tag
  15. sql 表,字段(列),表数据(行)相关命令
  16. php-cgi和php-fpm,Windows环境下解决Nginx+php并发访问阻塞问题。
  17. &lt;Android 基础(三十三)&gt; TabHost ~ 仿微信底部菜单
  18. WebService—CXF整合Spring实现接口发布和调用过程
  19. ICG游戏:斐波那契博弈
  20. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

热门文章

  1. java nio 与io区别
  2. 使用WebDriverWait类处理等待(sleep)的问题
  3. CSS之过渡简单应用—日落西山
  4. 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)
  5. iOS开发笔记1:[转]导航栏里的&quot;Back&quot;按钮显示不出来
  6. json返回数据时提示字符串超出长度
  7. 4 多表代替密码之Hill 密码_1 矩阵工具类
  8. 【Learning Python】【第三章】表、元组、字典和集合
  9. Python笔记——类定义
  10. 通过HttpWebRequest请求与HttpWebResponse响应方式发布接口与访问接口