【POI2012】SZA-Cloakroom
##题面
链接在这里(洛谷)
bzoj上是权限题哇qwq
简述题意:
有n(1<=n<=1000)n(1<=n<=1000)n(1<=n<=1000)件物品,每件物品有三个属性c[i],a[i],b[i](1<=c[i]<=1000,1<=a[i]<b[i]<=109)c[i], a[i], b[i] (1<=c[i]<=1000, 1<=a[i]<b[i]<=10^9)c[i],a[i],b[i](1<=c[i]<=1000,1<=a[i]<b[i]<=109)。
再给出q(q<=106)q(q<=10^6)q(q<=106)个询问,每个询问由非负整数m,k,s(1<=m<=109,1<=k<=105,0<=s<=109)m, k, s(1<=m<=10^9, 1<=k<=10^5, 0<=s<=10^9)m,k,s(1<=m<=109,1<=k<=105,0<=s<=109)组成,问是否能够选出某些物品使得:∀选择的物品i,a[i]<=m,b[i]>m+s且∑c[i]=k\forall 选择的物品i,a[i]<=m , b[i]>m+s且\sum c[i] = k∀选择的物品i,a[i]<=m,b[i]>m+s且∑c[i]=k。
##分析
最开始考虑的是限制条件对应一个二维线段树的区间,但是想了想好想不太能搞,合并的复杂度有点上天。
那么首先考虑退化退化版本,没有a[i]和b[i]a[i]和b[i]a[i]和b[i]的限制,那么明显是一个可达性dp
继续考虑退化版本,如果只有a[i]a[i]a[i]的限制怎么处理。
注意到一般的可达性dp中从未利用过物品的访问顺序,于是我们考虑将物品按照a[i]a[i]a[i]排序,当访问到一个a[i]a[i]a[i]的时候就把恰好大于他的询问都处理。
现在需要考虑怎么加入另一个限制。其实我们只需求一个不用离线排序的做法做刚刚那个退化问题,然后结合刚刚算法就可以了。
注意到我们另一个用的不太充分的东西是dp[i]dp[i]dp[i],一般的可达性dp中dp[i]只能是0或1dp[i]只能是0或1dp[i]只能是0或1,利用效率不高。于是令dp[i]dp[i]dp[i]表示拼出iii的数值的所有方案中,最小的b[i]b[i]b[i]最大能是几,于是我们只需在询问的时候去看dp[i]dp[i]dp[i]是否大于m+sm+sm+s即可。
于是我们解决了这个问题。
##思路总结
在对一个问题进行思考的时候,可以首先考虑思考他的退化版本,然后考虑我们有哪些条件/变量/性质/…应用不够充分,再思考能否加以利用解决更强的问题。
##代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <bits/stdc++.h>
#include <set>
#include <queue>
#define MAXN
#define ri register int
using namespace std;
/*有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i])。
再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:
对于每个选的物品i,满足a[i]<=m且b[i]>m+s。
所有选出物品的c[i]的和正好是k。*/
int n, Q, dp[100050], ans[1000050];
struct node{int a, b, c, id;bool operator < (const node &x) const {return a < x.a;}
}obj[1050], q[1000050];
int main() {scanf("%d", &n);for(ri i = 1; i <= n; i++) scanf("%d%d%d", &obj[i].c, &obj[i].a, &obj[i].b);scanf("%d", &Q);for(ri i = 1; i <= Q; i++) scanf("%d%d%d", &q[i].a, &q[i].c, &q[i].b), q[i].id = i;sort(obj+1, obj+n+1); sort(q+1, q+Q+1);int pos = 1;dp[0] = 2e9;for(ri i = 1; i <= n; i++) {//cout<<obj[i].a<<' '<<obj[i].b<<' '<<obj[i].c<<'\n';while(q[pos].a < obj[i].a && pos <= Q) {//cout<<pos<<' '<<q[pos].a<<' '<<q[pos].b<<' '<<q[pos].c<<' '<<dp[q[pos].c]<<'\n';ans[q[pos].id] = (dp[q[pos].c] > q[pos].a+q[pos].b);pos++;}for(ri j = 100000; ~j; j--) dp[j+obj[i].c] = max(dp[j+obj[i].c], min(dp[j], obj[i].b));//for(ri j = 0; j <= 5; j++) cout<<dp[j]<<' ';//cout<<'\n';}while(pos <= Q) {//cout<<pos<<' '<<q[pos].a<<' '<<q[pos].b<<' '<<q[pos].c<<' '<<dp[q[pos].c]<<'\n';ans[q[pos].id] = (dp[q[pos].c] > q[pos].a+q[pos].b);pos++;}for(ri i = 1; i <= Q; i++) printf(ans[i]?"TAK\n":"NIE\n");return 0;
}
【POI2012】SZA-Cloakroom相关推荐
- 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
[BZOJ2797][Poi2012]Squarks Description 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*( ...
- 【BZOJ2791】[Poi2012]Rendezvous 倍增
[BZOJ2791][Poi2012]Rendezvous Description 给定一个n个顶点的有向图,每个顶点有且仅有一条出边. 对于顶点i,记它的出边为(i, a[i]). 再给出q组询问, ...
- 【业界偷懒】【Public】BZOJ题目一句话题解整理
转发[Hzwer]: 就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A ...
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...
- 【C#】Out与ref是干什么的?
关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【VB】学生信息管理系统5——数据库代码
这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...
- 白化(预处理步骤)【转】
白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...
最新文章
- 懂数学人的都认同:数学的本质[关联]万物(二)
- 三、索引优化(3)聚集索引上的非聚集索引
- python学习-- for和if结合使用
- Machine Learning week 6 quiz: programming assignment-Regularized Linear Regression and Bias/Variance
- linux——awk 报告生成器
- ???????????? no permissions的解决办法 解决网上方法行不通的问题
- 你确定自己不是那只猫吗
- css编写加载页面动画效果
- python编程例子_Python的经典入门书籍有哪些?这5本值得一看
- 解密Google、百度搜索引擎揭秘
- memcached mysql 同步,mysql中使用UDF自动同步memcached效率笔记
- Zotero如何更改字体大小
- 计算机时间校对更改原因,计算机时间校准方法
- linux swap交换分区
- 微信小程序 php解密,微信小程序des加密、PHP des解密
- 用verilog编写按键消抖代码
- 怎样去除图片水印?教你一个一键去除水印的方法
- VS中无法解析的外部命令的解决办法
- python入门——python基础语法
- 将Google Analytics for Firebase数据导入BigQuery
热门文章
- 解决win10无法启用文件和打印机共享功能,你可能没有权限使用网络资源。请与这台服务器的管理员联系以查明你是否有访问权限
- hackthebox - frolic (考点: 信息搜集 ook解密 base解密 zip 解密 xxd解密 brainfuck解密 playsms安全)
- 音响常见故障如何解决?
- Allure趋势图本地显示
- 服务器删除的excel文件备份在哪里,microsoft excel备份文件在哪 - 卡饭网
- 2022年软件测试有哪些趋势?
- hdu5773 2016年多校4 nlogn求LIS
- 基于Java的奖学金评定系统的设计
- lzg_ad:CMD下打开控制面板
- java 代码块 构造函数_Java学习笔记之------构造函数,静态关键字,静态代码块,构造代...