Atcoder beginner contest 336 -- D -- Pyramid

2024-01-15 04:12

本文主要是介绍Atcoder beginner contest 336 -- D -- Pyramid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

D -- Pyramid:

题目大意:

思路解析:

代码实现:


D -- Pyramid:

题目大意:

给你一个长度为n的数组,你可以对这个数组进行以下操作。

操作1:选择任意一个元素,使其值大小减一。

操作2:删除第一个或者最后一个元素。

在进行有限次操作后,一定可以得到一个形如1 2 3 2 1这样的数字金字塔,问这个长度为n的数组能得到最长的数字金字塔的长度是多少。 1 2 3 2 1 这样的数字金字塔长度为3.

思路解析:

对于数字金字塔的前半部分,ak1 ak2 ak3 ak4 ... ak,如果他前面加上ak0就不能构成数字金字塔了,如果将ak认为是这个数字金字塔的中心,那么我应该知道ak向左最远能到哪个地方。

对于数字金字塔的后半部分 ak ak+1 ak+2....am 如果在后面加上am1就不能构成数字金字塔了,如果将ak认为是这个数字金字塔的中心,那么我应该知道ak向右最远能到哪个地方。

知道了ak的左右边界后,Math.min(l,r)就是ak的总体边界,即当ak为中心时,这个数字金字塔的最大长度,如果对于n个元素每个都能得到他们作为中心时数字金字塔的最大长度,那么对于这些最大长度整体求最大,那么这个长度就是答案。

代码实现:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;public class Main {public static void main(String[] args) throws IOException {Scanner input = new Scanner(System.in);int n = input.nextInt();int[] arr = new int[n];int[] l = new int[n];int[] r = new int[n];for (int i = 0; i < n; i++) {arr[i] = input.nextInt();}l[0] = 1;for (int i = 1; i < n; i++) {l[i] = Math.min(l[i - 1] + 1, arr[i]);}r[n - 1] = 1;for (int i = n - 2; i >= 0; i--) {r[i] = Math.min(r[i + 1] + 1, arr[i]);}int ans = 0;for (int i = 0; i < n; i++) {ans = Math.max(ans, Math.min(l[i], r[i]));}System.out.println(ans);}
}

这篇关于Atcoder beginner contest 336 -- D -- Pyramid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607602

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

Segmentation简记2-RESIDUAL PYRAMID FCN FOR ROBUST FOLLICLE SEGMENTATION

创新点 与resnet结合,五层/level的分割由此带来的梯度更新问题,设计了两种方案。 总结 有点意思。看图吧,很明了。 细节图: 全流程图: 实验 Res-Seg-Net-horz: 在UNet上堆叠5个细节图中的结构,没有上采样层。 Res-Seg-Net-non-fixed: 普通方式的更新 Res-Seg-Net-fixed: 每一层的更新,只依据距离它最近的一

【UVa】10600 ACM Contest and Blackout 次小生成树

类型:次小生成树 题目大意: 为了举办ACM竞赛,市长决定给所有的n(3 <= n <= 100)所学校提供可靠的电力供应。当且仅当一个学校直接连到电站,或者连到另一个有可靠供应的学校时,才有可靠供应。现在给出在不同学校之间的布线成本,找出最便宜的两种连线方案。一个方案的成本等于其中所有学校之间连线的成本的总和。 题目分析: 次小生成树。 先求出最小生成树,然后枚举所有不在