题意

有一只青蛙,有\(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. Git拉取代码切换分支

    1.克隆代码 cd d:/GitTest //指定存放的目录 git clone https://git.oschina.net/name/test.git //你的仓库地址 2.查看远程所有分支 g ...

  2. s5p6818 Overview

    S5P6818: 64bit Octa-Core, High Performance, Advanced 3D Graphics, Full-HD Multimedia Video, A53 Core ...

  3. 一个农民工自学java找到工作的励志故事

    <!-----------------------------------------------------------------------------摘自网络-------------- ...

  4. RDS for MySQL 逻辑备份文件恢复到自建数据库

    使用MySQL自带的 mysqldump 工具可以通过逻辑备份文件恢复数据库,本文将介绍详细的逻辑备份恢复数据库操作步骤. 说明 通过物理备份文件恢复到自建数据库请参见RDS for MySQL 物理 ...

  5. 怎样绑定this

    有三种方法: 1. Function.prototype.call();  2. Function.prototype.apply();  3. Function.prototype.bind(); ...

  6. (一)Lucene简介以及索引demo

    一.百度百科 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查 ...

  7. LeetCode 1047. Remove All Adjacent Duplicates In String

    1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项) 链接:https://leetcode-cn.com/problems/r ...

  8. 国际化(i18n)学习

    一 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization)又称 ...

  9. 客户端相关知识学习(十一)之Android H5交互Webview实现localStorage数据存储

    前言 最近有一个需求是和在app中前端本地存储相关的,所以恶补了一下相关知识 webView开启支持H5 LocalStorage存储 有些时候我们发现写的本地存储没有起作用,那是因为默认WebVie ...

  10. Express无法解析POST请求的JSON参数

    在用Express和MongoDB搭建后端开发环境时,可能会利用测试工具发送带有JSON格式数据的POST请求,那么这时就要利用request.body获取json数据,但此时可能遇到json无法解析 ...