[BZOJ2794][Poi2012]Cloakroom
2794: [Poi2012]Cloakroom
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 167 Solved: 119
[Submit][Status][Discuss]
Description
有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i])。
再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:
1. 对于每个选的物品i,满足a[i]<=m且b[i]>m+s。
2. 所有选出物品的c[i]的和正好是k。
Input
第一行一个正整数n (n<=1,000),接下来n行每行三个正整数,分别表示c[i], a[i], b[i] (c[i]<=1,000, 1<=a[i]<b[i]<=10^9)。
下面一行一个正整数q (q<=1,000,000),接下来q行每行三个非负整数m, k, s (1<=m<=10^9, 1<=k<=100,000, 0<=s<=10^9)。
Output
输出q行,每行为TAK (yes)或NIE (no),第i行对应第i此询问的答案。
Sample Input
6 2 7
5 4 9
1 2 4
2 5 8
1 3 9
5
2 7 1
2 7 2
3 2 0
5 7 2
4 1 5
Sample Output
NIE
TAK
TAK
NIE
HINT
Source
先看数据范围,发现q非常的大,所以想到离线处理。
如果离线处理,可以把a的这个条件直接去掉,只需用b和c来DP。
然后就非常简单了。时间复杂度$O(qlogq+nk)$
#include<cstdio>
#include<algorithm>
#define N 1005
#define M 100010
#define Q 1000100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,q,f[M]={1e9},ans[Q],maxn;
struct node{int a,b,c,id;}a[N],b[Q];
bool operator<(node x,node y){return x.a<y.a;}
int main()
{
n=read();
for(int i=;i<=n;i++)
a[i].c=read(),a[i].a=read(),a[i].b=read();
sort(a+,a+n+);
q=read();
for(int i=;i<=q;i++)
b[i].a=read(),b[i].c=read(),b[i].b=read(),
b[i].id=i,maxn=max(maxn,b[i].c);
sort(b+,b+q+);
for(int i=,j=;i<=q;i++)
{
while(j<=n&&a[j].a<=b[i].a)
{
for(int k=maxn;k>=a[j].c;k--)
f[k]=max(f[k],min(f[k-a[j].c],a[j].b));
j++;
}
ans[b[i].id]=(f[b[i].c]>b[i].a+b[i].b);
}
for(int i=;i<=q;i++)
puts(ans[i]?"TAK":"NIE");
}
[BZOJ2794][Poi2012]Cloakroom的更多相关文章
- BZOJ2794[Poi2012]Cloakroom——离线+背包
题目描述 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得:1. 对于每个 ...
- 【BZOJ2794】[Poi2012]Cloakroom 离线+背包
[BZOJ2794][Poi2012]Cloakroom Description 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]).再给出q个询问,每个询问 ...
- BZOJ 2794 [Poi2012]Cloakroom(离线+背包)
2794: [Poi2012]Cloakroom Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 406 Solved: 241[Submit][St ...
- #13【BZOJ2794】[Poi2012]Cloakroom
题解: 感觉真是很智障..连这么简单的题都没想出来 一直在想这么做动态背包..发现不会 首先显然我们将询问按照m 序列按照a[i]排序 然后怎么满足b呢 其实很简单啊..只需要记录f[i]表示前面这些 ...
- bzoj 2794 [Poi2012]Cloakroom 离线+背包
题目大意 有n件物品,每件物品有三个属性a[i], b[i], c[i] (a[i]<b[i]). 再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得: 对于每个选 ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
- dp专题复习
背包: 1.bzoj2287:[POJ Challenge]消失之物 2.bzoj2748:[HAOI2012]音量调节 3.bzoj2794:[Poi2012]Cloakroom 4.bzoj119 ...
- Work at DP
转载请注明出处:http://www.cnblogs.com/TSHugh/p/8858805.html Prepared: (无notes的波兰题目的notes见我的波兰题目补全计划)BZOJ #3 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- devices-list
转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...
- 【翻译二十三】java-并发程序之随机数和参考资料与问题(本系列完)
Concurrent Random Numbers In JDK 7, java.util.concurrent includes a convenience class, ThreadLocalRa ...
- 【stut 逆置正整数】
C语言实验——逆置正整数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 输入一个三位正整数,将它反向输出. 输入 3位正整数. ...
- 攻城狮在路上(肆)How tomcat works(零) 前言说明
最近几篇是关于How tomcat works一书的读书笔记. 通过数个章节逐渐实现一个tomcat的功能. 源码下载地址:http://zhidao.baidu.com/share/7007af0f ...
- WPF线程(Step2)——BackgroundWorker
在WPF中第二个常用的线程处理方式就是BackgroundWorker. 以下是BackgroundWorker一个简单的例子. public partial class MainWindow : W ...
- error MSB6006: “cmd.exe”已退出,代码为 3。
VS2012 Qt项目生成提示以下错误: 原因是 generated files 的 debug或release文件夹下的文件不存在. 解决方法:QT5 –>convert project ...
- java-xml格式化
参考:http://www.oschina.net/code/snippet_17793_4733 package com.ddatsh; import java.io.IOException; ...
- wpf window set window的owner
[DllImport("user32.dll")] public static extern IntPtr GetAncestor(IntPtr hWnd, int f ...
- Socket编程基础知识
端口号常识: 端口号被从1 开始分配. 通常端口号超出255 的部分被本地主机保留为私有用途. 1到255 之间的号码被用于远程应用程序所请求的进程和网络服务. 每个网络通信循环地 ...
- document对象(二)
五.相关元素操作: var a = document.getElementById("id"); 找到a: var b = a.nextSibling ...