[Agc030B]Tree Burning_贪心
Tree Burning
题目链接:https://atcoder.jp/contests/agc030/tasks/agc030_b
数据范围:略。
题解:
开始以为是左右左右这样,发现过不去样例。
看了样例之后,觉得是:看左边右边哪个比较长,走长的那个。
发现过了第一个样例,过不去第二个了....
看了看第二个样例,又画了画第三个样例,加上枫哥在给我这道题之前的提示:你要大胆猜啊...
发现:一定是先往一个方向连续走几个,然后左右横跳。
这个就对了,用数学归纳法容易证明。
所以我们只需要开始逆时针连续走了多少个,然后用什么前缀和啥的随便求一求就好了。
求完了之后,把序列反转再来一次即可。
代码:
#include <bits/stdc++.h>
#define N 1000010
using namespace std;
typedef long long ll;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
ll m;
int n;
ll a[N];
ll bfr[N], ans;
void solve() {
bfr[0] = 0;
for (int i = 1; i <= n; i ++ ) {
bfr[i] = bfr[i - 1] + a[i];
}
for (int i = 1; i <= n; i ++ ) {
ll mdl;
if (i & 1) {
int x = (i - 1) >> 1;
mdl = ((ll)m * x - (bfr[n] - bfr[n - x])) * 2 + a[n - x] + (bfr[n - x - 1] - bfr[n - x - x - 1]) * 2;
}
else {
int x = i >> 1;
mdl = (m * (x - 1) - (bfr[n] - bfr[n - x + 1])) * 2 + ((ll)m - a[n - x + 1]) + (bfr[n - x] - bfr[n - x - x]) * 2;
}
ans = max(ans, mdl);
}
}
int main() {
m = rd(), n = rd();
for (int i = 1; i <= n; i ++ ) {
a[i] = rd();
}
solve();
for (int i = 1; i <= n; i ++ ) {
a[i] = m - a[i];
}
reverse(a + 1, a + n + 1);
solve();
cout << ans << endl ;
return 0;
}
[Agc030B]Tree Burning_贪心的更多相关文章
- 2020牛客暑期多校训练营 第二场 C Cover the Tree 构造 贪心
LINK:Cover the Tree 最受挫的是这道题,以为很简单 当时什么都想不清楚. 先胡了一个树的直径乱搞的贪心 一直过不去.后来意识到这类似于最经典长链剖分优化贪心的做法 然后那个是求最大值 ...
- 【AtCoder AGC023F】01 on Tree(贪心)
Description 给定一颗 \(n\) 个结点的树,每个点有一个点权 \(v\).点权只可能为 \(0\) 或 \(1\). 现有一个空数列,每次可以向数列尾部添加一个点 \(i\) 的点权 \ ...
- codeforces #530 D(Sum in the tree) (树上贪心)
Mitya has a rooted tree with nn vertices indexed from 11 to nn, where the root has index 11. Each ve ...
- uoj【UNR #3】To Do Tree 【贪心】
题目链接 uojUNR3B 题解 如果不输出方案,是有一个经典的三分做法的 但是要输出方案也是可以贪心的 设\(d[i]\)为\(i\)节点到最深的儿子的距离 贪心选择\(d[i]\)大的即可 #in ...
- CodeForces - 1098.DIV1.C: Construct a tree(贪心,构造)
Misha walked through the snowy forest and he was so fascinated by the trees to decide to draw his ow ...
- [BZOJ2654]tree 最小生成树+贪心
2654: tree Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2435 Solved: 1011[Submit][Status][Discus ...
- Codeforces 196C Paint Tree(贪心+极角排序)
题目链接 Paint Tree 给你一棵n个点的树和n个直角坐标系上的点,现在要把树上的n个点映射到直角坐标系的n个点中,要求是除了在顶点处不能有线段的相交. 我们先选一个在直角坐标系中的最左下角的点 ...
- [CSP-S模拟测试]:Tree(贪心)
题目描述 给定一颗$n$个点的树,树边带权,试求一个排列$P$,使下式的值最大 $$\sum \limits_{i=1}^{n-1}maxflow(P_i,P_{i+1})$$ 其中$maxflow( ...
- Codeforces Round #530 (Div. 2) D. Sum in the tree 树上贪心
D. Sum in the tree 题意 给出一颗树,奇数层数的点有值,值代表从1到该点的简单路的权值的和,偶数层数的点权值被擦去了 问所有节点的和的最小可能是多少 思路 对于每一个-1(也就是值未 ...
随机推荐
- Shell 05 Sed
一.基本用方法 1.sed文本处理工具的用法 用法1:前置命令 | sed [选项] '条件指令' 用法2:sed [选项] '条件指令' 文件.. .. 注意:没有条件时候,默认所有条件, ...
- luogu 2052 [NOI2011]道路修建 BFS序
据说dfs会爆栈,写一个 BFS 序更新就好了~ #include <bits/stdc++.h> #define N 1000005 #define ll long long #defi ...
- luogu P4859 已经没有什么好害怕的了
嘟嘟嘟 题中给的\(k\)有点别扭,我们转换成\(a > b\)的对数是多少,这个用二元一次方程解出来是\(\frac{n + k}{2}\). 然后考虑dp,令\(dp[i][j]\)表示前\ ...
- ImportError: No module named pytz
xxx@hostname:/opt/xx/cc$ python manage.py runserver Traceback (most recent call last): File , in < ...
- cas系列-cas server demo搭建(二)
一 部署简述 cas server官方推荐采用overlay方式进行部署,通过替换自定义文件,减少项目文件改动,以简化开发和部署,这个有点类似于项目上直接替换java的class文件,由于和git的搭 ...
- storm滑动窗口
Window滑动方式: 没有数据不滑动windowLength:窗口的时间长度/tuple个数slidingInterval:滑动的时间间隔/tuple个数 withWindow(Duration w ...
- android: Android 权限管理小结
一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...
- LC 898. Bitwise ORs of Subarrays
We have an array A of non-negative integers. For every (contiguous) subarray B = [A[i], A[i+1], ..., ...
- kotlin之MutableMap委托
fun main(arg: Array<String>) { val map = mutableMapOf("name" to "tom", ) v ...
- SEO优化篇——meta用法
一.语法:<meta name="name" content="string"> 二.参数解析:1)name选项:Keywords(关键字),des ...