Educational Codeforces Round 40 (Rated for Div. 2) 954G G. Castle Defense
题
OvO http://codeforces.com/contest/954/problem/G
解
二分答案,
对于每个二分的答案值 ANS,判断这个答案是否可行。
记 s 数组为题目中描述的 a 数组
以下为初始化:
首先建一个 pre 数组, pre[i] 表示 s 数组中第 个元素到第 i 个元素的和
然后建一个 p 数组,其中 p[i] 代表能射到第 i 个区域的弓箭手数量, p[i] 显然可以由 pre 计算得到
以下是对于二分的每个答案值 ANS,判断这个值是否可行的做法:
创建一个 d 数组, d[i] = p[i] - p[i-1],
从左到右枚举 d 数组,用变量 now 累加得到当前区域的坚固程度(即能有多少弓箭手能射到这个块)
枚举的过程中,如果出现 now 比 ANS 值小的话,则得到这个差值, 记这个差值为 tmp ,那么显然要在 i+r 的地方放 tmp 个弓兵,那么要做如下操作
1. now+=tmp (则当前节点的坚固程度+tmp)
2.d[i+2*r+1)]-=tmp (区域 [i,i+2*r] 的坚固程度均加 tmp,等价的就是 1,2 这两个操作)
3.记总的可用弓兵消耗为为 cst ,则 cst+=tmp
如果 cst>k 显然不行,否则可行。
注意数据范围,容易中间爆 long long 之类的,用线段树时间大概不够(吧)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio> using namespace std; typedef long long ll; const ll M=11e5+44;
const ll INF=4e18+44; ll n,r;
ll s[M];
ll k;
ll p[M],pre[M],d[M]; bool check(ll spl)
{
ll cst=0,now=0,tmp;
for(ll i=1;i<=n;i++)
d[i]=p[i]-p[i-1];
for(ll i=1;i<=n;i++)
if((now+=d[i])<spl)
{
tmp=spl-now;
if((cst+=tmp)>k) return false;
d[i]+=tmp,now+=tmp,d[min(n+1,i+2*r+1)]-=tmp;
}
return true;
} ll solve()
{
ll ret;
ll li,ri,mid;
li=0,ri=INF;
while(li<ri-1)
{
mid=((li+ri)>>1);
if(check(mid)) li=mid;
else ri=mid;
}
return ret=li;
} int main()
{
ll li,ri;
scanf("%I64d%I64d%I64d",&n,&r,&k);
for(ll i=1;i<=n;i++)
scanf("%I64d",&s[i]);
memset(pre,0,sizeof(pre));
memset(p,0,sizeof(p));
for(ll i=1;i<=n;i++)
pre[i]=pre[i-1]+s[i];
for(ll i=1;i<=n;i++)
{
li=i-r,ri=i+r;
if(li<1) li=1;
if(ri>n) ri=n;
p[i]=pre[ri]-pre[li-1];
}
printf("%I64d\n",solve());
return 0;
}
Educational Codeforces Round 40 (Rated for Div. 2) 954G G. Castle Defense的更多相关文章
- Educational Codeforces Round 40 (Rated for Div. 2) Solution
从这里开始 小结 题目列表 Problem A Diagonal Walking Problem B String Typing Problem C Matrix Walk Problem D Fig ...
- Educational Codeforces Round 40 (Rated for Div. 2)
A. Diagonal Walking time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
随机推荐
- 【LOJ】#2210. 「HNOI2014」江南乐
LOJ#2210. 「HNOI2014」江南乐 感觉是要推sg函数 发现\(\lfloor \frac{N}{i}\rfloor\)只有\(O(\sqrt{N})\)种取值 考虑把这些取值都拿出来,能 ...
- Oracle的varchar2如何比较大小
首先要说的是Oracle中字符类型的比较都是基于ASCII码表来实现的,我就简单做个总结. Oracle中varchar2类型的字符串使用的是非填充空格的标准来进行比较的(表格中右边的那列,注意空格的 ...
- JAVA支持字符编码读取文件
文件操作,在java中很常用,对于存在特定编码的文件,则需要根据字符编码进行读取,要不容易出现乱码 /** * 读取文件 * @param filePath 文件路径 */ public static ...
- ARTS第九周打卡
Algorithm : 做一个 leetcode 的算法题 /* 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. ...
- PAT(B) 1013 数素数(Java)
题目链接:1013 数素数 代码 /** * Score: 20 * Run Time: 124ms * @author wowpH * @version 1.0 */ import java.uti ...
- docker 实践一:简介和安装
docker 的简介 docker 绝对是这几年来的重量级开源软件,它是使用 Go 实现的开源容器项目,分属于虚拟化技术. docker 和 虚拟机 docker 作为一种轻量级的虚拟化方式,在运行应 ...
- (转)js-分享功能(qq,微信,微博)
//1 分享QQ好友 function qq(title,url,pic) { var p = { url: 'http://test.qicheyit ...
- Java Convention 公约数计算
Java Convention 公约数计算 /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...
- pmtk3
summary A list of every PMTK3 demo auto-generated by publishDemos on 27-Mar-2012 Book Demos (1) Intr ...
- MySQL: Can’t connect to MySQL server on (111 “Connection refused”)
1. Mysql连接问题 远程访问mysql或者通过docker访问宿主机mysql经常会碰到下面的问题: Can't connect to MySQL server on (111 "Co ...