P1311 选择客栈

题目描述

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

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

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

输入输出格式

输入格式:

共\(n+1\) 行。

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

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

输出格式:

一个整数,表示可选的住宿方案的总数。

数据范围

对于 \(30\%\) 的数据,有 \(n ≤100\) ;

对于 \(50\%\) 的数据,有 \(n ≤1,000\) ;

对于 \(100\%\) 的数据,有 \(2 ≤n ≤200,000,0<k ≤50,0≤p ≤100\), \(0≤\) 最低消费 \(≤100\) 。


这是一道很神奇的题目,因为我在短短20分钟错了四次(考场必拍啊)

做完瞅了一下题解,发现做法非常之多。

我的想法是,先用vector把每种颜色搞出来,然后前缀和统计某个区间是否有咖啡

对每种颜色,我们考虑每一个相邻两点区间,这个区间对答案的贡献即是区间左边的点数 \(\times\) 区间右边的点数

好的,它是错的。因为重复统计了。

我们考虑删去重复统计的,稍稍模拟一下即可发现,前一个合法的区间的左端点及其左边的点不需要统计,好了,维护一个指针就行了


Code:

#include <cstdio>
#include <vector>
#define ll long long
using namespace std;
const int N=2000010;
const int M=10010;
ll ans;
int n,k,p,f[N];
vector <int> ctsc[M];
int main()
{
scanf("%d%d%d",&n,&k,&p);
for(int color,cost,i=1;i<=n;i++)
{
scanf("%d%d",&color,&cost);
ctsc[color].push_back(i);
f[i]=f[i-1]+(cost<=p);
}
for(int i=0;i<k;i++)
for(int s=0,j=1;j<ctsc[i].size();j++)
if(f[ctsc[i][j]]-f[ctsc[i][j-1]-1])
{
ans+=(ll)(j-s)*(ll)(ctsc[i].size()-j);
s=j;
}
printf("%lld\n",ans);
return 0;
}

2018.8.5

洛谷 P1311 选择客栈 解题报告的更多相关文章

  1. 洛谷P1311 选择客栈

    P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...

  2. [NOIP2011] 提高组 洛谷P1311 选择客栈

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

  3. 洛谷 P1311 选择客栈

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

  4. 洛谷 P1311 选择客栈 —— 水题

    题目:https://www.luogu.org/problemnew/show/P1311 看每个位置能否成为咖啡店,然后作为客栈和前面配对即可. 代码如下: #include<iostrea ...

  5. 洛谷——P1311 选择客栈

    https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰 ...

  6. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  7. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  8. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  9. 洛谷 P1131 选择客栈

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

随机推荐

  1. TPO-12 C2 A problem of the TA's payroll

    TPO-12 C2 A problem of the TA's payroll payroll n. 工资单:在册职工人数:工资名单: paycheck n. 付薪水的支票,薪水 paperwork ...

  2. Python简要标准库(2)

    集合 堆 和 双端队列 1.集合 创建集合 s = set(range(10)) 和字典一样,集合元素的顺序是随意的,因此不能以元素的顺序作为依据编程 集合支持的运算 a = set([1,2,3]) ...

  3. 哈希表 -数据结构(C语言实现)

    读数据结构与算法分析 哈希表 一种用于以常数平均时间执行插入.删除和查找操作的数据结构. 但是是无序的 一般想法 通常为一个包含关键字的具有固定大小的数组 每个关键字通过散列函数映射到数组中 冲突:两 ...

  4. 大理石在哪儿 (Where is the Marble?,UVa 10474)

    题目描述:算法竞赛入门经典例题5-1 #include <iostream> #include <algorithm> using namespace std; ; int m ...

  5. 在使用Pipeline串联多个stage时model和非model的区别

    train.csv数据: id,name,age,sex1,lyy,20,F2,rdd,20,M3,nyc,18,M4,mzy,10,M 数据读取: SparkSession spark = Spar ...

  6. python 文件编译成exe可执行文件。

    pyinstaller打包方法: pyinstaller安装参考地址:http://www.pyinstaller.org/ pywin32的下载地址:https://sourceforge.net/ ...

  7. 论文笔记:Attentional Correlation Filter Network for Adaptive Visual Tracking

    Attentional Correlation Filter Network for Adaptive Visual Tracking CVPR2017 摘要:本文提出一种新的带有注意机制的跟踪框架, ...

  8. opencv-学习笔记(3)

    opencv-学习笔记(3) 这章讲了 图像加法 opencv测试效率 IPYTHON测试效率 图像加法 cv2.add() 要求,两图片必须大小类型相同 然后是图像混合cv2.addWeighted ...

  9. javascript对table的添加,删除行的操作

    <body> <form name="myForm"> <table width="100%" id="tab" ...

  10. 一些容易记混的c++相关知识点

    一些容易记混的c++相关知识. 截图自:<王道程序员面试宝典>