O(N)做法看过来!!!!!

我刚才看了一下题解好像还没有看到和我想法相同的同学。

其实这道题也没有想像中的那么难。

话不多说直接进入主题。


首先题意想必大家都知道了。 首先直接枚举的方法肯定是过不去的,而且直接枚举的话还不怎么好写。该怎么办呢?


因为我们要在两个人之间找到一个价格小于P的餐厅,所以我们可以不用去枚举两个人住在哪里。


我们可以去求每个小于P的餐厅对于答案的贡献是多少。(思路转化,由已知条件去求另一个东西)

如果我们这样想的话就会好想很多。也就是说符合条件的餐厅两边的客栈都是符合条件的。那我们应该怎样有序的枚举呢。


首先我们需要定义一个前缀和 QAQ[i][j] 表示在i号点及其以前j种颜色的客栈有多少个。


我们还要定义P为上一个可行的餐厅。初值为0

根据乘法原理 当前的点对于答案的贡献为这个点两边可行的点的数量相乘。但是为了避免重复计算,我们只需计算P号点到当前点相同颜色的数量乘上当前点以后的相同颜色的个数。

(刚才我发想Liunx没有自带的画图,我就不放图了,尴尬尴尬) 小伙伴们可以自行那笔画一下。

但是更才我们统计的是这个点两边的贡献,我们还没有算上住在自身的情况,所以答案还要加上,这个点到P的之间可以住的数量以及这个点以后可以住的数量。这样这道题就做完了。

附上代码供大家参考:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int qaq[200010][55];
int val[200010];
int col[200010];
long long ans;
int main() {int a,b,c;cin>>a>>b>>c;for(int i = 1;i <= a;i ++) {cin>>col[i]>>val[i];qaq[i][col[i]] ++;for (int j = 0; j < b; ++j) {qaq[i][j] += qaq[i - 1][j];   //前缀和}}int p = 0;                            //记录上次在哪里更新的答案for (int k = 1; k <= a; ++k) {if(val[k] <= c) {for (int i = 0; i < b ; ++i) {ans += (qaq[k - 1][i] - qaq[p][i]) * (qaq[a][i] - qaq[k][i]);    //乘法原理统计答案}ans += qaq[a][col[k]] - qaq[p][col[k]] - 1;       //计算住在这个点下对答案的贡献,-1是因为要把自己这个点减去p = k;                //P点更新}}cout<<ans;return 0;
}

NOIP2013落谷P1311选择客栈题解相关推荐

  1. 洛谷 P1311 选择客栈

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

  2. 洛谷P1311 选择客栈

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

  3. 洛谷——P1311 选择客栈

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

  4. Luogu P1311 选择客栈(前缀和)

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

  5. P1311 选择客栈

    题面:https://www.luogu.org/problem/P1311 本题先考虑暴力,即枚举每一个客栈,找后面第一个与当前客栈相同颜色且满足最低消费不超过p的客栈,然后统计在此客栈后有多少个与 ...

  6. NOIP2011 D1 T2选择客栈

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

  7. 【NOIP2011TG】【OJ4366】【codevs1135】选择客栈

    选择客栈 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 丽江河边有 n ...

  8. 洛谷P4568 [JLOI2011] 飞行路线 题解

    洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...

  9. 洛谷P1156 垃圾陷阱 题解浅谈刷表法与填表法

    洛谷P1156 垃圾陷阱 题解&浅谈刷表法与填表法 填表法 :就是一般的动态规划,当前点的状态,可以直接用状态方程,根据之前点的状态推导出来. 刷表法:由当前点的状态,更新其他点的状态.需要注 ...

最新文章

  1. 【云原生AI】Fluid + JindoFS 助力微博海量小文件模型训练速度提升 18 倍
  2. python 如何把小数变成百分数格式
  3. c语言各类随机函数,怎样让c语言中的随机函数真正随机?
  4. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)
  5. 阮一峰react demo代码研究的学习笔记 - how is source code converted
  6. 男人一生要做的九件事情
  7. SpringBoot使用RequestBodyAdvice进行统一参数处理
  8. 安装、配置文件-配置 CACTI 监控 MySQL 数据库状态-by小雨
  9. 重庆“扫黄打非”部门打掉一网络传黄团伙,查获淫秽视频11万余部
  10. [转]Python3之max key参数学习记录
  11. zlib库删除后的恢复
  12. 在Linux(Ubuntu)下编写编译C语言
  13. matlab powf,科学网—MZDDE中操作数更正 - 张凯元的博文
  14. 【小程序源码】宝宝起名神器
  15. java long 和long_java中Long和long的区别
  16. 自选天气,F1 Delta Time 大奖赛重燃战火
  17. 8. 关于打分函数F1分数 TPR PPV等
  18. 金融脱媒(Financial Disintermediation),又称金融非中介化
  19. Android自定义schema,android hybird 实现:自定义schema
  20. 禁用wifi共享精灵、禁用wifi热点、win7禁用wifi

热门文章

  1. java怎么判断数字几位数_Java判断数字位数的方法总结
  2. css修改el-button的默认样式
  3. HTML标签之文本标签
  4. 2022第二届中国高校大数据竞赛A题(更新完毕)
  5. KeyMob:移动广告聚合平台 收益提高30%
  6. 金蟾论金:黄金多头迎非农,最新黄金走势分析实时策略布局
  7. 最难游戏2计算机5关,史上最牛的游戏2攻略 史上最牛的游戏1~5关攻略
  8. 纯电阻电路的分析方法——结点电压法
  9. 【websocket】 websocket 详解
  10. html5圆圈,HTML5动感圆圈