传送门

发现保持自信和做其他事情互不干扰,可以直接做一次 $dp$ 求出最多能空出几天来怼大佬

然后就变成给你若干天,是否能怼死大佬,考虑求出所有的 天数和输出的嘲讽值集合,因为天数不多,嘲讽值增长很快

所以直接 $BFS$ + $map$ 去重就行了

不怼大佬或者只怼一次的情况容易计算,现在问题是怼两次的情况怎么搞

设两次怼的嘲讽值分别为 $fx,fy$,输出这些嘲讽值需要的天数分别为 $dx,dy$

如果要怼死大佬,只要满足限制 $fx+fy<=C$,$C-fx-fy<=D-dx-dy$,把刚刚得到的集合按 嘲讽值,天数 双关键字排序

考虑维护两个指针 $x,y$,$x$ 从大到小,$y$ 从小到大,在枚举 $x$ 的时候移动 $y$ 使得 $y$ 满足 $fx+fy<=C$

把第二个式子变一下 $C-fx<=D-dx+(fy-dy)$

当我们固定了 $x$ 以后,要求的就是满足 $fx+fy<=C$ 中的 $fy-dy$ 的最大值

因为随着 $fx$ 增加,之前枚举到的 $fy$ 一直满足条件,所以直接搞一个变量维护当前 $fy-dy$ 的最大值即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,M=1e7+,INF=1e9+;
int n,m,mc,a[N],w[N],C[N];
int f[N][N],D,tot,mx;
struct dat{
int d,f,l;
dat (int a=,int b=,int c=) { d=a,f=b,l=c; }
};
queue <dat> Q;
struct datt{
int f,d;
datt (int a=,int b=) { f=a,d=b; }
inline bool operator < (const datt &tmp) const {
return f!=tmp.f ? f<tmp.f : d<tmp.d;
}
}T[M];
map <datt,bool> vis;
void BFS()
{
dat x=dat(,,); Q.push(x);
while(!Q.empty())
{
x=Q.front(); Q.pop(); if(x.d==D) continue;
Q.push(dat(x.d+,x.f,x.l+));
if(x.l>&&1ll*x.f*x.l<=mx&&!vis[datt(x.f*x.l,x.d+)])
{
Q.push((dat){x.d+,x.f*x.l,x.l});
T[++tot]=datt(x.f*x.l,x.d+); vis[datt(x.f*x.l,x.d+)]=;
//只把有用的加入集合
}
}
}
int main()
{
n=read(),m=read(),mc=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n;i++) w[i]=read();
for(int i=;i<=m;i++) C[i]=read(),mx=max(mx,C[i]);
for(int i=;i<=n;i++)
for(int j=a[i];j<=mc;j++)
{
f[i][j-a[i]]=max(f[i][j-a[i]],f[i-][j]+);
f[i][min(j-a[i]+w[i],mc)]=max(f[i][min(j-a[i]+w[i],mc)],f[i-][j]);
}
for(int i=;i<=n;i++)
for(int j=;j<=mc;j++) D=max(D,f[i][j]);
BFS(); sort(T+,T+tot+);
for(int i=;i<=m;i++)
{
if(C[i]<=D) { printf("1\n"); continue; }
bool flag=; int GG=-INF;
for(int x=tot,y=;x;x--)
{
while(y<=tot && T[x].f+T[y].f<=C[i]) GG=max(GG,T[y].f-T[y].d),y++;
if( y<=tot && C[i]-T[x].f<=D-T[x].d+GG ) { flag=; break; }
if(T[x].f<=C[i] && C[i]-T[x].f<=D-T[x].d) { flag=; break; }
}
printf("%d\n",flag);
}
return ;
}

P3724 [AH2017/HNOI2017]大佬的更多相关文章

  1. 洛谷P3724 [AH2017/HNOI2017]大佬(决策单调性)

    传送门 这个思路很妙诶->这里 以下为了方便,我把自信说成血量好了 虽然表面上看起来每一天有很多种选择,然而我们首先要保证的是不死,然后考虑不死的情况下最多能拿出多少天来进行其他操作.不死可以d ...

  2. [AH2017/HNOI2017]大佬

    题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于 ...

  3. [AH2017/HNOI2017]大佬(动态规划 搜索)

    /* 神仙yyb 理解题意可以发现 能够对大佬造成的伤害只和你怼了多少天大佬有关, 而且显然天数越多越好 那么我们可以先通过预处理来找出我们最多能够怼多少天大佬 然后我们发现最后我们能怼的血量状态数是 ...

  4. #10 [AH2017/HNOI2017]大佬

    题解: 题意看上去挺复杂的 分析一下就能发现自己的自信是没啥用的 只要随便dp一下看看最多能有多少天不使用增加自信 然后问题就变成了 求C1+C2+k=C 然后发现C有10^8 显然枚举C1是不行的了 ...

  5. P3723 [AH2017/HNOI2017]礼物

    题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1      c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...

  6. 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告

    P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...

  7. [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)

    题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...

  8. 笔记-[AH2017/HNOI2017]礼物

    笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...

  9. 洛谷P3724 大佬 [AH2017/HNOI2017] dp+bfs

    正解:dp+bfs 解题报告: 传送门! 这题看起来很复杂的样子其实真的很复杂 但是仔细看一下题目,会发现其实操作只有两个目的嘛,一个是保证自己不死,一个是让对手减血 而且保证自己不死只有一种操作 而 ...

随机推荐

  1. sql中count(1)和count(*)有区别吗

    count(*) 对 innodb 而言,它需要把数据从磁盘中读取出来然后累计计数:而 MyISAM 引擎把一个表的总行数存在了磁盘上,所以执行 count(*) 会直接返回这个数,如果有 where ...

  2. 《SaltStack技术入门与实践》——执行结果处理

    执行结果处理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或 ...

  3. 【NOIP2016提高A组模拟8.14】疯狂的火神

    题目 火神为了检验zone的力量,他决定单挑n个人. 由于火神训练时间有限,最多只有t分钟,所以他可以选择一部分人来单挑,由于有丽子的帮助,他得到了每个人特定的价值,每个人的价值由一个三元组(a,b, ...

  4. 如何解决DEDE织梦友情链接字数限制与链接个数限制的问题?

    如何解决DEDE织梦友情链接字数限制与链接个数限制的问题!织梦网站非常适合网站搭建以及网站优化,而友情链接是做优化必不可少的模块,我们经常搭建织梦网站发现织梦系统的友情链接模板有时候会限制字数不显示以 ...

  5. phpstudy升级5.7

    1:备份当前数据库数据. 最好是导成 SQL 文件 2:备份 PhpStudy 下的 MySQL 文件夹.以防升级失败.还可以使用旧版本的数据库 3:下载MySQL5.7.解压.然后放在 PhpStu ...

  6. 封装Qt的SQLite接口类

    还没测试完善.. #ifndef SQLITE_H #define SQLITE_H #include <QSqlDatabase> #include <QSqlQuery> ...

  7. Activiti流量变量(九)

    1什么是流程变量 流程变量在 activiti 中是一个非常重要的角色,流程运转有时需要靠流程变量,业务系统和 activiti结合时少不了流程变量,流程变量就是 activiti 在管理工作流时根据 ...

  8. Socket网络通信编程(二)

    1.Netty初步 2.HelloWorld 3.Netty核心技术之(TCP拆包和粘包问题) 4.Netty核心技术之(编解码技术) 5.Netty的UDP实现 6.Netty的WebSocket实 ...

  9. java配置环境变量 jdk1.8

    1.首先第一步安装JDK window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/j ...

  10. Splinter 的认识和基础应用

    Splinter 是一个使用Python开发的开源web应用测试程序,它可以帮助我们实现自动浏览站点和与其进行交互.它是依赖于其它python插件或拓展进行的,所以我们使用它之前需要安装一系列的依赖包 ...