Noip2011 提高组 选择客栈
P1311 选择客栈
思路:
①看题,我们可以发现一个显然的性质,即当最左边的客栈向右移动时,最右边的客栈时单调向右的,并且右端点往右的客栈也符合要求。(因为只要左侧有一个满足的,右边的自然可以选)
不妨将每种颜色的宾馆分别放到 vector 中。
然后在每个 vector 中枚举左端点,维护一个单调指针来确定右端点 (vector中的下标)。
我们接下来就要快速判断一段区间是否合法,我们开一个ok数组,表示从i点开始最近的满足条件的位置(不考虑颜色)。
这样的话转移就是:
ok[i]=i;(p[i]<=P),反之:ok[i]=ok[i+1];
需要注意的是ok[n+1]=n+1;
表示如果p[n]>P则p[n]=p[n+1]=n+1,即不合法
②大模拟,详细看代码
坑点:
注意输入顺序qwq
上代码:
1)vector版
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std; const int K = ;
const int N = ;
int n,k,p,ans;
int w[N],ok[N];
vector<int>v[K]; void getnxt() {
ok[n+]=n+;
for(int i=n; i>=; i--) {
if(w[i]<=p) ok[i]=i;
else ok[i]=ok[i+];
}
} int main() {
scanf("%d%d%d",&n,&k,&p);
for(int i=,x; i<=n; i++) {
scanf("%d%d",&x,&w[i]);
v[x].push_back(i);
}
getnxt();
for(int i=,d,s; i<k; i++) {
d=;
s=v[i].size(); //i客栈连接的s个客栈
for(int j=; j<s; j++) {
d=max(d,j+); //当前枚举到的最右端的客栈所在色调的编号是多少
while(ok[v[i][j]]>v[i][d] && d<s) {
d++;
} //这里不太懂...
ans+=s-d;
}
}
printf("%d",ans);
return ;
}
2)纯模拟版
#include <iostream>
#include <cstdio>
using namespace std; const int K = ;
int n,k,p,ans;
int precnt[K],ok[K],last[K];
//precnt[x] i点前颜色为x的客栈数
//ok[x] i点前满足能有价格<=p的客栈的颜色为x的客栈数
//last[x] i点 前一个颜色 为x的点的编号 int main() {
scanf("%d%d%d",&n,&k,&p);
for(int i=,tmp,x,y; i<=n; i++) {
scanf("%d%d",&x,&y);
if(y<=p) tmp=i; //记录下来当前色调的可行的最右客栈编号
if(tmp>=last[x]) ok[x]=precnt[x];
ans+=ok[x];
precnt[x]++; //不管是不是可以满足条件
last[x]=i;
}
printf("%d",ans);
return ;
}
Noip2011 提高组 选择客栈的更多相关文章
- NOIP2011提高组 选择客栈
原题 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- [NOIP2011] 提高组 洛谷P1312 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- [NOIP2011] 提高组 洛谷P1315 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
- [NOIP2011] 提高组 洛谷P1003 铺地毯
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- NOIP2011(提高组)DAY2---观光公交(vijosP1741)
描述 风景迷人的小城Y市,拥有n个美丽的景点.由于慕名而来的游客越来越多,Y市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0分钟出现在1号景点,随后依次前往2.3.4……n号景 ...
- 洛谷-铺地毯-NOIP2011提高组复赛
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- 刷题总结——mayan游戏(NOIP2011提高组day2T3)
题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
随机推荐
- Mac电脑配置相关及软件工具安装推荐
iTerm2(https://www.iterm2.com/) 终端工具 Alfred(http://xclient.info/s/alfred.html) 快速启动器 WebStorm.VSCode ...
- git 去除版本控制
git会进入当前文件目录, 然后执行如下命令: find . -name ".git" | xargs rm -Rf 该项目就会去除git的版本控制了.再修改的话也不会影响git的 ...
- 【微信支付】公众号 JSAPI支付 HTML5(使用MUI前端框架)+WebApi 实现流程
必要参数: 1) AppID,AppSecret : 在微信公众号后台管理—>(菜单栏)开发 —> 基本设置 2)商户号 :在微信公众号后台管理—>(菜单栏)微信支 ...
- Django-2.0 汉化
1.语言 LANGUAGE_CODE = 'zh-hans' 2.时区 TIME_ZONE = 'Asia/Shanghai' 3.字段名汉化 models.CharFielf(verbose_nam ...
- 基于【 Docker】二 || Docker的入门安装
一.前提条件 本文介绍 Docker CE 的安装使用. 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3. ...
- nodejs入门API之path模块
Path模块在各个系统上的差异 Path模块API解析 一.Path模块在各个系统上的差异 path模块提供用于处理文件路径和目录路径的使用工具. let path = require('path') ...
- Django路由及函数视图
路由系统 在django中,uri与逻辑函数的对应关系我们称之为路由系统 伪静态 伪静态是相对于静态文件来说的,例如https://www.cnblogs.com/hesujian/p/1116581 ...
- HighChart 不同颜色(柱状图)
var chart = new Highcharts.Chart({ chart: { plotBackgroundColor: null, plotBorderWidth: null, backgr ...
- 1.NIO概述
/*Java NIO 简介*/ java NIO (New IO)是从 java1.4版本开始引入的一个新的IO API,可以替代标准的 java IO API (jdk1.7又对其进行了改进, 称为 ...
- MySQL数据库---数据库管理
-- 创建用户,指定明文密码create user 'rose'@'localhost' identified by 'rosepwd'; -- 查看用户是否创建成功select user,host ...