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;
}

最新文章

  1. Redis 哨兵模式实现主从故障互切换
  2. 根据UIColor对象,获取对应的RGBA值
  3. iOS--APP 登录界面图(xuer)
  4. hdu 4794 FIb求循环节
  5. ORACLE 11g R2数据库安装硬件环境要求
  6. SAP-MM:发票、贷方凭证、事后借记、后续贷记
  7. Linux高性能server规划——多进程编程
  8. CF #April Fools Day Contest 2016 E Out of Controls
  9. Oracle DECODE函数的用法详解
  10. Django学习之十三:提高页面开发效率减少冗余的模板系统
  11. win10下安装Cygwin配置gcc编译环境
  12. 微信小程序wx.uploadFile 上传文件 的两个坑
  13. 分布式事务(二)Java事务API(JTA)规范
  14. Javascript中函数提升和变量提升
  15. s3存储桶:s3可扩展的云存储
  16. Echarts饼图显示模板
  17. vue-cli初始化一个项目
  18. Java(20~24)
  19. css长度
  20. Python爬虫之Cookie和Session

热门文章

  1. JAVA类的无参方法
  2. 【线性代数】6-2:对角化(Diagonalizing a Matrix)
  3. IDEA算法导包后 import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey;报错
  4. Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明
  5. 使用iptables为docker容器动态添加端口映射
  6. 解决 Windows启动时要求验证
  7. Druid Monitor监控Java Web和Java SE项目
  8. REPLACE 语法
  9. PHPCMS get SQL 返回单条的办法
  10. centos 7设置limit,不生效问题