题意

有一只青蛙,有\(0, 1, \cdots, N - 1\)个荷叶。每个荷叶上有权值\(s_i\)。

  1. 选定\(A\), \(B\),初始分数为\(0\)。

    当前位置为\(x\):
  2. 对于\(y = x + A\):
    • 如果\(y = N - 1\),游戏结束。
    • 如果\(y \neq N - 1\),但是\(y\)这个荷叶存在,那么分数增加\(s_i\),并且这片荷叶消失。
    • 如果\(y \neq N - 1\),但是\(y\)这个荷叶不存在,那么分数减去\(10^{100}\),游戏结束。
  3. 对于\(y = x - B\):
    • 如果\(y = N - 1\),游戏结束。
    • 如果\(y \neq N - 1\),但是\(y\)这个荷叶存在,那么分数增加\(s_i\),并且这片荷叶消失。
    • 如果\(y \neq N - 1\),但是\(y\)这个荷叶不存在,那么分数减去\(10^{100}\),游戏结束。

      问选定最优的\(A\)、\(B\)的情况下,得到的最高分数为多少?

思路

我们考虑,选定了\(A\)、\(B\)后,青蛙的行走路线为:

\[\begin{eqnarray*}
0, A, A - B, A + (A - B), 2(A - B), \cdots, K(A - B), A + K(A - B)
\end{eqnarray*}
\]

我们令\(C = A - B\):

\[\begin{eqnarray*}
0, A, C, A + C, 2C, \cdots, KC, A + KC
\end{eqnarray*}
\]

显然有:\(A + KC = N - 1\):

\[\begin{eqnarray*}
0, N - 1 - KC, C, N - 1 - (K - 1)C, 2C, \cdots, KC, N - 1
\end{eqnarray*}
\]

那么当\(K\)、\(C\)确定的时候,行走路线就已经确定。

并且有一个限制条件为\(KC < N\),那么显然枚举\(K\)、\(C\)是\(O(nlogn)\)的。

并且我们发现,当我们固定\(C\),递增\(K\)的时候,行走路线的变化是这样的:

\[\begin{eqnarray*}
&&0, N - 1\\
&&0, N - 1 - C, C, N - 1\\
&&0, N - 1 - 2C, C, n - 1 - C, 2C, N - 1\\
\end{eqnarray*}
\]

每次增加的是\(N - 1 - KC\)和\(KC\),这两个点,只需要加上就好了,并且要注意判断是否走到重复的点上了。

代码

#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 100010
int n;
ll s[N];
int used[N]; int main() {
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; ++i) {
scanf("%lld", s + i);
}
memset(used, 0, sizeof used);
ll res = 0;
for (int C = 1; C <= n; ++C) {
ll tmp = 0;
for (int k = 1; 1ll * k * C < n; ++k) {
int a = k * C;
int b = n - 1 - k * C;
int A = b, B = b - C;
if (A <= 0 || B <= 0) break;
if (a < 0 || a >= n || b < 0 || b >= n || a == b) break;
if (used[a] == C || used[b] == C) {
break;
}
used[a] = C;
used[b] = C;
tmp += s[a];
tmp += s[b];
res = max(res, tmp);
}
}
printf("%lld\n", res);
}
return 0;
}

AtCoder Beginner Contest 128 F - Frog Jump的更多相关文章

  1. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  2. AtCoder Beginner Contest 261 F // 树状数组

    题目链接:F - Sorting Color Balls (atcoder.jp) 题意: 有n个球,球有颜色和数字.对相邻的两球进行交换时,若颜色不同,需要花费1的代价.求将球排成数字不降的顺序,所 ...

  3. AtCoder Beginner Contest 260 F - Find 4-cycle

    题目传送门:F - Find 4-cycle (atcoder.jp) 题意: 给定一个无向图,其包含了S.T两个独立点集(即S.T内部间的任意两点之间不存在边),再给出图中的M条边(S中的点与T中的 ...

  4. AtCoder Beginner Contest 253 F - Operations on a Matrix // 树状数组

    题目传送门:F - Operations on a Matrix (atcoder.jp) 题意: 给一个N*M大小的零矩阵,以及Q次操作.操作1(l,r,x):对于 [l,r] 区间内的每列都加上x ...

  5. AtCoder Beginner Contest 249 F - Ignore Operations // 贪心 + 大根堆

    传送门:F - Keep Connect (atcoder.jp) 题意: 给定长度为N的操作(ti,yi). 给定初值为0的x,对其进行操作:当t为1时,将x替换为y:当t为2时,将x加上y. 最多 ...

  6. AtCoder Beginner Contest 247 F - Cards // dp + 并查集

    原题链接:F - Cards (atcoder.jp) 题意: 给定N张牌,每张牌正反面各有一个数,所有牌的正面.反面分别构成大小为N的排列P,Q. 求有多少种摆放方式,使得N张牌朝上的数字构成一个1 ...

  7. AtCoder Beginner Contest 133 F Colorful Tree

    Colorful Tree 思路: 如果强制在线的化可以用树链剖分. 但这道题不强制在线,那么就可以将询问进行差分,最后dfs时再计算每个答案的修改值, 只要维护两个数组就可以了,分别表示根节点到当前 ...

  8. AtCoder Beginner Contest 171-175 F

    171 F - Strivore 直接把初始字符当成隔板,统计的方案数会有重复 为了避免重复情况,规定隔板字母尽可能最后出现,即在隔板字母后面不能插入含隔板字母的字符串 所以在隔板字母后插入的字符只有 ...

  9. AtCoder Beginner Contest 182 F

    F - Valid payments 简化题意:有\(n\)种面值的货币,保证\(a[1]=1,且a[i+1]是a[i]的倍数\). 有一个价格为\(x\)元的商品,付款\(y\)元,找零\(y-x\ ...

随机推荐

  1. Struts2简介、初步使用

    今日分享的是楼楼新学的一个框架,Struts2: 一:Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2 ...

  2. Http中的同步请求和异步请求

    最近在上springmvc的JSON数据交换的时候,老师下课提了一个课后问题:什么是异步请求?什么是同步请求?我想大部分同学听到这个问题的时候应该和我一样不知所云.现在,给大家分享一篇关于同步请求和异 ...

  3. Java内存 模型理解

    概述 在正式讲Java内存模型之前,我们先了解一些物理计算机并发问题,然后一点点的引出Java内存模型的由来. 多任务处理在现在计算机操作系统中几乎是一项必备的功能.这不单是因为计算机计算能力强大,更 ...

  4. 【原创】大叔经验分享(94)jdbc连接mysql、sqlserver、oracle

    Mysql driver下载:https://mvnrepository.com/artifact/mysql/mysql-connector-java import java.sql.*; publ ...

  5. jQuery_jQuery的两把利器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. form表单详解

    form表单 form是一个复杂的系统标签,其内部又可包含很多的一些输入标签 例如input 输入文本标签  checkbox 多选标签等等 form表单有几个属性我们需要注意一下 1:action属 ...

  7. dubbo框架梳理

    Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...

  8. windows环境安装haproxy及初步配置负载均衡使用示例

    安装HaProxy 首先需要下载windows环境下需要文件,这里下载的是一个别人编译好的一个文件,这里省去了编译的过程,使用的版本是haproxy-1.7.8. 下载后直接解压到对应的目录下.示例( ...

  9. Button控件的三种点击事件

    ①在布局文件中指定onClick属性的方法设置点击事件 ②使用匿名内部类的方法设置点击事件 ③实现Activity实现OnClickListen接口的方式设置点击事件 linear.xml文件 < ...

  10. oracle通过一个字段分组,取另一个字段的最大值

    select * from bdcdj.lqentry1 a  where 顺序号 in (select max(顺序号) from bdcdj.lqentry1 b WHERE b.archival ...