题目大意:

给定n k A B为位置长度 复仇者个数 两种花费

在一段为1~2^n的位置中 某些位置存在一些复仇者

求消灭所有复仇者的最小花费

对一段位置可以有两种处理方式

1.若该段长度至少为2 可以将其分成长度相等的两段分开处理

2.若该段中不存在复仇者 那么一共只需花费 A

若该段中存在复仇者 那么花费为 复仇者个数*该段长度*B

将复仇者位置排序后 对范围[l,r]的一段 利用二分函数就可获得该段中复仇者的个数

对整段[1,2^n]深搜一下 复杂度不超过O((2^n)<<2)

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
const int N=1e5+;
LL n,k,A,B,a[N];
LL dfs(int l,int r) {
int L=lower_bound(a,a+k,l)-a;
int R=upper_bound(a,a+k,r)-a;
LL cnt=R-L; // 在l r范围内的复仇者的个数
if(cnt==) return A; // 没有复仇者
if(l==r) return B*cnt; // 已经缩小到一个点 且该点有复仇者
int m=(l+r)>>; // 将当前段二分
return min(B*cnt*(r-l+),dfs(l,m)+dfs(m+,r));
// 直接消灭整段的复仇者 和 二分后再消灭 取小
}
int main()
{
while(~scanf("%I64d%I64d%I64d%I64d",&n,&k,&A,&B)) {
for(int i=;i<k;i++) scanf("%I64d",&a[i]);
sort(a,a+k); // 将所有复仇者的位置排序 然后才可用二分函数
printf("%I64d\n",dfs(,<<n));
} return ;
}

CF#537 C. Creative Snap /// DFS的更多相关文章

  1. 【cf1111】C. Creative Snap (dfs+dp)

    传送门 简单的dfs+dp即可解决.根本不用动态开点 /* * Author: heyuhhh * Created Time: 2019/11/13 10:12:42 */ #include < ...

  2. Codeforces Round #537 C. Creative Snap

    题面: 传送门 题目描述: 灭霸想要摧毁复仇者联盟的基地.基地的长度为2的n次方,基地可以看成是一个长度为2的n次方的数组.基地的每一个位置可以由很多个超级英雄,但是一个超级英雄只能站一个位置.灭霸想 ...

  3. Codeforces 1111C Creative Snap分治+贪心

    Creative Snap C. Creative Snap time limit per test 1 second memory limit per test 256 megabytes inpu ...

  4. #537 (Div. 2) Creative Snap (思维+dfs)

    https://codeforces.com/contest/1111/problem/C 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出).你是灭霸你要用以下方法消灭这 ...

  5. CodeCraft-19 and Codeforces Round #537 (Div. 2) C. Creative Snap 分治

    Thanos wants to destroy the avengers base, but he needs to destroy the avengers along with their bas ...

  6. 【CodeCraft-19 and Codeforces Round #537 (Div. 2) C】Creative Snap

    [链接] 我是链接,点我呀:) [题意] 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出). 你是灭霸你要用以下方法消灭这k个复仇者: 一开始你获取整个区间[1..2^n ...

  7. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  8. CF Fox And Two Dots (DFS)

    Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  9. CF 327D - Block Tower 数学题 DFS 初看很难,想通了就感觉很简单

    D. Block Tower time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. HTTP 请求及响应 (转)

    HTTP请求 4.1.HTTP请求包括的内容 客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求. 一个完整的HTTP请求包括如下内容:一个请求行.若干消息头. ...

  2. shell-#!

    当shell执行一个程序时,会要求UNIX内核启动一个新的进程,以便在该进程里执行所指定的程序. 当系统只有一个shell时,退回到/bin/sh 的机制非常方便,但现行的UNIX系统都会拥有好几个s ...

  3. Java中的集合和线程安全

    通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...

  4. python+tushare获取股票和基金每日涨跌停价格

    接口:stk_limit 描述:获取全市场(包含A/B股和基金)每日涨跌停价格,包括涨停价格,跌停价格等,每个交易日8点40左右更新当日股票涨跌停价格. 限量:单次最多提取4800条记录,可循环调取, ...

  5. 在Ubuntu中安装配置java后运行java -version时提示二进制文件不能执行

    因为jdk安装包有问题,试试32位的

  6. Java面试宝典(5)算法

    二.算法与编程 1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 答: pack ...

  7. SpringBoot 应用程序启动过程探秘

    概述 说到接触 SpringBoot 伊始,给我第一映像最深的是有两个关键元素: 对照上面的典型代码,这个两个元素分别是: @SpringBootApplication SpringApplicati ...

  8. Linux环境安装Nginx步骤

    centos7平台编译环境使用如下指令安装: 1. 安装make: yum -y install gcc automake autoconf libtool make 2. 安装g++: yum -y ...

  9. KiCAD实用操作

    KiCAD实用操作之一:自动编辑线宽 今天偶然间发现的一个比较实用的功能,算是KiCAD的一个优点吧(或许是在AD上面没发现):当整个PCB布完线或者在布线过程中,我们有可能需要对某个线的宽度进行调整 ...

  10. python补充4

    一 如何判断一个对象是不是函数类型 #方法一def func(arg): if callable(arg): print("是函数"+arg()) else: print(arg) ...