虽然只是10^6的数据量,但用cin会tle。一直知道cin常数大,但没想到会是10^2这个级别。

我们枚举每个power的lamp,然后对每个power用平均logn的代价去求它的cost,最后取最小值

对于每个power,我们从左往右地去照亮整个区间,首先0点要插一个路灯,下一个路灯理想上想插在0+power的位置(这样区间不被重复照亮),但实际上power位置上的路灯可能被blocked了,所以我们想在power位置之前的离power最近的一个位置安装路灯。如果发现最近的那个位置离power的位置大于power了,那power位置永远不会被照亮,返回-1

这样贪心实际上每次算cost的代价是 n/power,为什么平均意义下是logn的呢。

因为整体下来是n/1+n/2+n/3+n/4+...+n/k,可见k越大整体复杂度越高,我们考虑其上限及k=n的情况,得到n(1+1/2+1/3+1/4+...+1/n),而1+1/2+1/3+1/4+1/5+...+1/n这个数列求和是logn级别的因为可以把1/3+1/4看成1/2,1/5+1/6+1/7+1/8看成1/2,接下来的每8项,16项都是1/2。然后把n看成2^k的话也可以把n看成2^0+2^1+2^2+...+2^k-1,其中每一份都对数列的和贡献出1/2,所以这个数列求和是1/2*logn左右,及logn级别的。

 1 #include<iostream>
 2 using namespace std;
 3
 4 int n,m,k;//长度为n,m个
 5 int cost[1000005],blocked[1000005],last_unblocked[1000005];
 6 long long ans;
 7 int main()
 8 {
 9     cin>>n>>m>>k;
10     for(int i=1;i<=m;i++){
11         int x; scanf("%d",&x);
12         blocked[x]=1;
13     }
14     for(int i=1;i<=k;i++) scanf("%d",&cost[i]); //power为i的lamp花费cost[i]
15     if(blocked[0]) { cout<<-1; return 0; }
16
17     int last=0;
18     for(int i=1;i<=n;i++){
19         if(!blocked[i]) last=i;
20         last_unblocked[i]=last;
21     }
22     for(int i=1;i<=k;i++){//模拟用每个power的路灯
23         long long c=0;
24         for(int index=0;index<n; ){//index是每一个要插路灯的位置
25             c+=cost[i];
26             if(index+i>=n) index=n;
27             else{
28                 int loc=last_unblocked[index+i];//下一个路灯想插在index+i,但这里可能被blocked了,那想照亮这个地方就找这个位置前面最近能放路灯的位置
29                 if(loc<=index) { c=-1; break; }
30                 index=loc;
31             }
32         }
33         if(c==-1) continue;
34         else{
35             if(ans==0) ans=c;
36             else ans=min(c,ans);
37         }
38     }
39
40     if(ans==0) cout<<-1;
41     else  cout<<ans;
42     return 0;
43 }

转载于:https://www.cnblogs.com/ZhenghangHu/p/9191168.html

Codeforces 990E Post Lamps 【暴力】【贪心】相关推荐

  1. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  2. leetcode53. 最大子数组和(暴力+贪心)

    一:论语 追求利益的同时 我们需要控制度 就好比鹅厂的王者荣耀 赚的盆满钵满 坑坏了多少青少年 但是鹅厂早已经开始控制度了 二:题目 三:上码(暴力+贪心) 1:暴力 class Solution { ...

  3. HDU 2681 MM Programming Club(miaos的线段树维护+ycy的暴力贪心)

    Description ACM is popular in HDU. Many girls want to learn more about programming skills in ACM. As ...

  4. 暴力 + 贪心 --- Codeforces 558C : Amr and Chemistry

    C. Amr and Chemistry Problem's Link: http://codeforces.com/problemset/problem/558/C Mean: 给出n个数,让你通过 ...

  5. K-periodic Garland CodeForces - 1353E(暴力+贪心+dp)

    题意: 给定长为 n 的 0, 1 字符串,你可以通过一次操作改变一个字符(0 变 1 or 1 变 0),问最少几次操作可以使任意相邻两个 1 之间的距离为 k ? 题目: You are give ...

  6. Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)

    A B C 给你N(N<=30)种水瓶每种水瓶有无限个 每个的体积是2^(i-1)价格是cost[i] 要求你花最少的钱弄出L体积的水 先从前到后扫一遍cost[i+1]=min(cost[i+ ...

  7. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  8. codeforces数学1600day6[CodeForces - 1029C多区间交+枚举,CodeForces 992C[数学公式推导],CodeForces 992B[质因数分解+暴力枚举]]

    A - Maximal Intersection CodeForces - 1029C 题目大意:就是给你n个区间,这n个区间有公共的区间长度为x,现在叫你从这n个区间中删掉一个使得x最大化. 解题思 ...

  9. Codeforces 671E Organizing a Race (贪心、线段树)

    题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...

最新文章

  1. 94.二叉树的中序遍历
  2. 大学计算机基础python-大学计算机基础最新章节_曾一著_掌阅小说网
  3. python输出数据到excel-python实现数据导出到excel的示例--普通格式
  4. 9月份国外最佳WordPress主机提供商Top12
  5. DM3730 LCD控制器驱动框架
  6. javascript创建DOM元素(标签script)并追加到title标签中
  7. python第一行左对齐_关于Python的第一行语句
  8. Windows Server 2012安装vc++组件失败
  9. Citrix XenDesktop VS Vmware View (上)-你必须懂得
  10. 国内车载信息安全产业联盟成立
  11. 7.Java反射面试题
  12. HeadFirstJava 11异常处理
  13. 换服务器系统怎么迁移,更换服务器时,数据迁移的方法
  14. android 如何自定义桌面,安卓手机桌面设置教程 个性化你的桌面
  15. Android解析短视频无水印链接(精)抖音/快手/微视
  16. 怎么用计算机算lnx,lnx等于多少怎么算
  17. 清明梦听说过吗?你对于控制你做梦这件事上的心力有多深
  18. 游戏视频录制用什么软件?这2款软件,用过都说好
  19. 2022年迎接“金三银四”,为什么面试你总拿不到高薪?你所不知道的面试技巧
  20. 西安交通大学计算机张飞导师,航海学院邀请西安交通大学段战胜教授来院作学术报告...

热门文章

  1. php 标题去重复思想,WordPress网站发布文章时如何防止发布重复标题的文章?
  2. php 表单提交文件大小,PHP如何通过表单直接提交大文件详解
  3. oracle 根据用户备份,Oracle基于用户的备份及恢复
  4. c++ stl 容器 迭代器 stl用法示例
  5. linux修改栈指针x86,x86-堆栈指针未填充16时libc的system()导致分段...
  6. c++builder tadoquery存储过程_Electron桌面应用程序从创建项目、启动项目到打包程序的详细过程...
  7. python实现dem输出三维模型_python DEM数据可视化
  8. requests由于系统缓冲区空间不足_系统C盘满了空间不足的扩容?
  9. 互相引用 spring_听说你还不知道Spring是如何解决循环依赖问题的?
  10. python模块如何导入解释器_无法从嵌入式解释器导入内置模块(仅限Windows)