NOIP2011 D1 T2选择客栈
上题目:
题目描述
丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。
两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过 p 。
他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过 p元的咖啡店小聚。
输入输出格式
输入格式:
输入文件hotel.in,共n+1 行。
第一行三个整数n ,k ,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;
接下来的n 行,第 i+1 行两个整数,之间用一个空格隔开,分别表示 i 号客栈的装饰色调和i 号客栈的咖啡店的最低消费。
输出格式:
输出文件名为hotel.out 。
输出只有一行,一个整数,表示可选的住宿方案的总数。
输入输出样例
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。
刚看到这题,第一反应就是想能否动规,但是想了想没什么头绪,干脆想下能不能一边扫过去直接找出答案,恰巧网上有一位大佬有一种非常玄学的思路就是这么扫过去的,于是就知道怎么做了。首先用一个color数组记录每种颜色的客栈有多少个,然后开始扫,每扫到一个,sum数组的值就++,表示该颜色的客栈已经扫到了多少个;再判断,如果该客栈费用低于最大值,就每种颜色扫一边,ans加上前面的客栈乘后面的客栈,也就是sum数组*color数组(很简单的数学原理),如果正好是扫到的这个颜色,还要加上sum的值再-1(因为这个客栈本身也可以计入,-1这个不用解释吧,因为不能和本身重复);另外千万不能忘了,每次扫颜色之后都要吧sum清空,为什么?前面的客栈不能重复计算阿!好吧如果实在不懂,就自己画图,在结合下面的代码想吧
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define N 200002 using namespace std; int n,m,p,num; long long ans; int color[51],sum[51]; struct Hotel{ int color,cost; }hotel[N];//习惯用结构体 int main() {scanf("%d%d%d",&n,&m,&p);for(int i=1;i<=n;i++){int x,y;scanf("%d%d",&x,&y);hotel[i].color=x;hotel[i].cost=y;color[x]++;}for(int i=1;i<=n;i++){sum[hotel[i].color]++;color[hotel[i].color]--;if(hotel[i].cost<=p)for(int j=0;j<=m;j++){if(j==hotel[i].color)ans+=color[j]*sum[j]+sum[j]-1;else ans+=color[j]*sum[j];sum[j]=0;//千万别忘了清零 }}printf("%lld\n",ans);return 0; }
---------------------------------------------------分割线----------------------------------------------------好吧,如果实在不懂,上洛谷去看大佬题解吧。。。。。。
转载于:https://www.cnblogs.com/cytus/p/7605987.html
NOIP2011 D1 T2选择客栈相关推荐
- NOIP2011选择客栈[递推]
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- Luogu P1311 选择客栈(前缀和)
P1311 选择客栈 题意 题目描述 丽江河边有\(n\)家很有特色的客栈,客栈按照其位置顺序从\(1\)到\(n\)编号.每家客栈都按照某一种色调进行装饰(总共\(k\)种,用整数\(0\)~\(k ...
- 【NOIP2011TG】【OJ4366】【codevs1135】选择客栈
选择客栈 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 丽江河边有 n ...
- Bailian4034 选择客栈【序列处理】
4034:选择客栈 总时间限制: 1000ms 内存限制: 65535kB 描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种 ...
- NOIP 2015 D1 T2 信息传递
趁着我还活在网上 多写点题解 * NOIP 2015 D1 T2 信息传递* 2996: [NOIP2015]信息传递 D1 T2 Time Limit: 1 Sec Memory Limit: 12 ...
- NOIP2011 选择客栈
题目描述 Description 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号.每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示),且每家客栈都设有一家 ...
- NOIP2011 选择客栈(洛谷P1311)
题目描述: 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店 ...
- 洛谷P1311 选择客栈
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- 洛谷——P1311 选择客栈
https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰 ...
最新文章
- python读取excel指定列-Python读取excel指定列生成指定sql脚本的方法
- 利用mybatis-generator自动生成代码
- EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?
- 数学界最恐怖的存在,学过数学的人,一辈子都不会忘记!
- CentOS 7.4系统安装配置图解教程
- php 运行thinkphp,thinkPHP cli命令行运行PHP代码
- 每日算法系列【LeetCode 315】计算右侧小于当前元素的个数
- 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
- QT自定义控件-经纬度输入框
- 1209 实验三同学评论
- 驭势领读 | 《让大象飞》:资本寒冬正好能让市场回归理性
- 开源免费的Mac剪切板管理工具-Maccy
- 嵌入式设备和固件中的自动漏洞检测(一):概览
- java_secret_dire宝典
- Linux:udev机制详解
- 华中科技大学计算机考研书籍,2020年华中科技大学计算机应用技术考研经验分享...
- 特斯拉与Uber达成协议,为Uber伦敦司机提供电动汽车
- Linux电脑安全管家
- 公路车sava和Java_入门之作 意外惊喜 SAVA追风5.0公路车 评测
- iptables、firewalld防火墙详解
热门文章
- sql左右连接的区别
- centos编译安装LNMP
- birt 报表设计(2)—介绍
- iOS设计模式 - 桥接
- 初试Node —— node.js的安装
- 虚拟化部署之Windows 7中远程管理Hyper-V
- python tableview 列宽_QTableView设置列宽
- python画图怎么调色_Python气象数据处理与绘图(19):如何使用NCL色板(调色盘思路相同)...
- 获取屏幕的宽高 android,Android获取屏幕宽高的方法
- 函数上下文this和参数列表arguments介绍