感染(low) Description

n户人家住在一条直线上,从左往右依次编号为1,2,…,n。起初,有m户人家感染了COVID-19,而接下来的每天感染的人家都会感染他家左右两家的人,问t天后总共有多少人家会感染。

Input 第一行输入三个整数n(1 <= n <= 2e5),m(0 <= m <= n),t(1<= t <= 2e5)。

第二行m个整数ai(1 <= ai <= n),代表最初感染的m户人家的编号。

Output 输出一个整数,代表最后会有多少人家感染。

思路

用 bfs 搜一遍

代码

#include<iostream>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define ll long long const int Len = 2e5 + 5;
int n,m,t;
int map[Len];
int pos[Len];
int mov[2] = {-1, 1};
int mark[Len];
struct Node
{
int x,t;
} st, ed;
queue<Node> q; void bfs()
{
//初始化、做标记、压队列
while(! q.empty())
{
st = q.front();
q.pop(); if(st.t > t)
continue; for(int i = 0; i < 2; i ++)
{
ed.x = st.x + mov[i];
ed.t = st.t + 1;
if(ed.x >= 1 && ed.x <= n && ! mark[ed.x] && ed.t <= t)
{
q.push(ed);
mark[ed.x] = 1;
}
}
}
} int main()
{
ios::sync_with_stdio(false); cin.tie(0);
//freopen("T.txt","r",stdin);
cin >> n >> m >> t;
for(int i = 1; i <= m; i ++)
{
cin >> pos[i];
mark[pos[i]] = 1;
q.push( (Node){ pos[i], 0});
}
bfs();
int cnt = 0;
for(int i = 1; i <= n; i ++)
if(mark[i])
cnt ++;
cout << cnt << endl; return 0;
}
Sample Input 1
10 3 2
1 3 4
Sample Output 1
6

思路

用 二分

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
const int Len = 1e6 + 5; long long sum[Len];
int n,q; int Binary_search(int k, int l, int r)
{
int mid;
int ans = 1e9;
while(l <= r)
{
mid = (l + r) / 2;
if(sum[mid] < k)
{
l = mid + 1;
}
else if(sum[mid] >= k)
{
r = mid - 1;
ans = min(ans, mid);
}
}
return ans ;
} int main()
{
ios::sync_with_stdio(false); cin.tie(0);
//freopen("T.txt","r",stdin);
cin >> n >> q;
for(int i = 1; i <= n; i ++)
{
cin >> sum[i];
sum[i] += sum[i - 1];
}
int x;
while(q --)
{
cin >> x;
cout << Binary_search(x, 1, n) <<endl;
} return 0;
}

思路

二分 + 维护单调队列 优化

代码

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int Len = 1e6 + 5; ll ar[Len];
ll br[Len];
ll sum[Len];
ll q[Len];
int id[Len]; int main()
{
ios::sync_with_stdio(false); cin.tie(0);
//freopen("T.txt","r",stdin);
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i ++)
cin >> ar[i];
for(int i = 1; i <= n; i ++)
cin >> br[i];
for(int i = 1; i <= n; i ++)
sum[i] = ar[i] - br[i] + sum[i - 1]; int cnt = 0;
q[++ cnt] = 0;
id[cnt] = 1;
for(int i = 1; i <= n; i ++)
if(sum[i] > q[cnt])
{
q[++cnt] = sum[i];
id[cnt] = i;
}
int tem;
while(m --)
{
cin >> tem;
cout << id[lower_bound(q + 1, q + 1 + cnt, tem) - q] << endl;
} return 0;
}

感染(low)bfs 、感染(mid) 二分、感染(high) 二分 + 维护单调 队列去除无用的点的更多相关文章

  1. 【BZOJ2806】Cheat(后缀自动机,二分答案,动态规划,单调队列)

    [BZOJ2806]Cheat(后缀自动机,二分答案,动态规划,单调队列) 题面 BZOJ 洛谷 题解 很有趣的一道题啊 对于在所有的串上面进行匹配? 很明显的后缀自动机 所以先构建出广义后缀自动机 ...

  2. hdu 5289 rmp+二分+枚举后界 or单调队列 ****

    好题~~ 给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数,枚举后界~~ 又是一种没见过的方法,太弱了/(ㄒoㄒ)/~~ #include <cstdio ...

  3. [USACO12MAR]花盆 二分 单调队列

    [USACO12MAR]花盆 二分 单调队列 存在一个长度为\(x\)的区间\([l,r]\),使得区间中最大值与最小值差至少为\(w\),求这个最小的\(x\) \(n\le 100000\),\( ...

  4. luogu P3657 (NOIP2017) 跳房子(二分+DP+单调队列)

    题面 传送门 分析 显然答案有单调性,可以二分答案,设当前二分值为g,根据题意我们可以求出跳跃长度的范围[l,r] 考虑DP 子状态: dp[i]表示跳到第i个点时的最大和 状态转移方程 \(dp[i ...

  5. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  6. hdu_5884_Sort(二分+单调队列)

    题目链接:hdu_5884_Sort 题意: 有n个数,每个数有个值,现在你可以选择每次K个数合并,合并的消耗为这K个数的权值和,问在合并为只有1个数的时候,总消耗不超过T的情况下,最小的K是多少 题 ...

  7. [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案

    考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...

  8. BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]

    2806: [Ctsc2012]Cheat 题意: 多个主串和多个询问串,每次询问将询问串分成多个连续子串,如果一个子串长度>=L且在主串中出现过就是熟悉的 如果熟悉的字符串长度>=询问串 ...

  9. BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列

    BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列 题意: 分析: 拆成链,二分答案,奇偶两个单调队列维护最大子段和,记录方案. 代码: #include <cstdio&g ...

随机推荐

  1. PostCSS的插件 -- 关于vue rem适配布局方案

    PostCSS的插件 作用:用于自动将像素单元生成rem单位 记以下三种 postcss-plugin-px2rem postcss-pxtorem postcss-px2rem 任选一种,最近大家推 ...

  2. 处理公共CDN突然失效的情况

    公共CDN的使用 刚开始开发我的博客时,使用的bootcdn,发现他们被黑过,虽然想骂那些“黑客”,但是我们也没办法去防范,只能从自己的网站上入手解决. 那时我还没技术解决这个问题,网上搜过,大都只提 ...

  3. String字符串位置移动

    有规律的String字符串位置移动 1.自定义一个有规律的String字符串 String numstr = "1,2,3,x,y,4,5"; 2.按逗号拆分numstr字符串 S ...

  4. Delphi XE XML信息的读取

    <?xml version=""?> <ConString> <Item> <Name/> <Type>C</Ty ...

  5. 内网渗透之信息收集-windows系统篇

    windows 用户相关 query user #查看当前在线的用户 whoami #查看当前用户 net user #查看当前系统全部用户 net1 user #查看当前系统全部用户(高权限命令) ...

  6. mongo请求超时

    no_cursor_timeout=True参数的使用 实例: import pymongo handler = pymongo.MongoClient().db.col with handler.f ...

  7. 我用STM32MP1做了个疫情监控平台4—功能完善界面重新设计

    目录 前言 界面展示 新增功能 API 接口说明 多个接口数据的获取和解析 FontAwesome字体图标库的使用 代码下载 系列教程 @ 前言 之前我用STM32MP1和Qt实现了疫情监控平台,系列 ...

  8. Natas16 Writeup(正则匹配,php命令执行)

    Natas16: 源码如下 <? $key = ""; if(array_key_exists("needle", $_REQUEST)) { $key ...

  9. VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用和secureCUT乱码

    错误:VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用 改正:找到虚拟机的位置找到下图灰色的部分:打开 .vmx后缀的操作系统配置文件,加入以下代码: cpuid.1.eax = :: 2. ...

  10. 图解Java设计模式之模板模式

    图解Java设计模式之模板模式 豆浆制作问题 模板方法模式基本介绍 模板方法模式原理类图 模板方法模式解决豆浆制作问题 模板方法模式的钩子方法 模板方法模式在Spring框架中的源码分析 模板方法模式 ...