题目链接

https://atcoder.jp/contests/agc030/tasks/agc030_b

题解

细节好题。。

首先假设第一步往右走,那么可以发现当拐弯的次数一定时路径是唯一的

于是可以枚举这个值

然后很烦的是枚举之后要分奇偶讨论。。

最后再翻过来做一遍处理第一步往左走就行了

时间复杂度\(O(n)\)

代码

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define llong long long
using namespace std; void read(int &x)
{
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
x*=f;
} const int N = 2e5;
llong a[N+3];
llong s[N+3];
int n; llong m,ans; void solve()
{
s[0] = 0ll; for(int i=1; i<=n; i++) s[i] = s[i-1]+a[i];
for(int i=1; i<=n; i++)
{
llong tmp;
if(i&1)
{
int x = (i-1)>>1;
tmp = (m*x-(s[n]-s[n-x]))*2+a[n-x]+(s[n-x-1]-s[n-x-x-1])*2;
}
else
{
int x = i>>1;
tmp = (m*(x-1)-(s[n]-s[n-x+1]))*2+(m-a[n-x+1])+(s[n-x]-s[n-x-x])*2;
}
ans = max(ans,tmp);
}
} int main()
{
scanf("%lld%d",&m,&n);
for(int i=1; i<=n; i++) scanf("%lld",&a[i]);
solve();
for(int i=1; i<=n; i++) a[i] = m-a[i];
reverse(a+1,a+n+1);
solve();
printf("%lld\n",ans);
return 0;
}

最新文章

  1. Netty 系列之 Netty 高性能之道
  2. 关于__int128
  3. HDU 1520:Anniversary party(树形DP)
  4. HTML的列表标签
  5. 使用mysqladmin ext 了解MySQL运行状态 转
  6. 40个Java集合面试问题和答案【下】【转载】
  7. 命令 &quot;sudo -H&quot; 中的这个 &quot;H&quot; 什么作用?
  8. Objective-C 引用计数:不讲用法,只说原理
  9. GameUnity 2.0 文档(二) 纸片人系统
  10. Pycharm+django新建Python Web项目
  11. 在RE了16次之后,没想到还可以这样Runtime error
  12. Tarjan求LCA
  13. 《http权威指南》读书笔记10
  14. Nginx负载均衡配置调优
  15. node.js入门学习笔记整理
  16. sql server连接字符串与tcp/ip开启
  17. [转]解决阿里云mysql不能连接,配置mysql远程连接
  18. 011.Zabbix的拓扑创建
  19. hashMap put方法 第二行代码
  20. iOS多线程编程之自定义NSOperation(转载)

热门文章

  1. bfs(太空电梯)
  2. # 模乘(解决乘法取模爆long long)
  3. 【深入理解JVM】类加载器与双亲委派模型 (转)
  4. CSS3面包屑菜单导航
  5. Java后端技术面试汇总(第二套)
  6. vue+element 使用Export2Excel导出表格组件
  7. oppo 手机不能连接appium,提示does not have permission android.permission.CLEAR_APP_USER_DATA to clear data
  8. Centos7:JDK1.8环境配置
  9. React源码深度解析视频 某课网(完整版)
  10. Oracle VM VirtualBox 安装 Centos7 并配置静态IP